2017-08-07 96 views
0

我試圖找到,如果間隔的列表裏面使用R.例如間隔的另一個列表中找到的其他區間內的時間間隔:,使用R

列表1

 start   end 
    100   500 
    700   800 

列表2

start   end 
    200   300 
    800   850 

預期產出將是

 TRUE 
    FALSE 

所以我試過這樣的:

 for (i in nrow(list1)){ 
      for (j in nrow(list2)){ 
      if ((list1[i, 1] <= list2[i,1]) & (list1[i, 2] >= list2[i,2])){ 
       print(list1[i, 1]) 
       } 
      } 
      } 

但是不工作。此外,這兩個列表的長度不一樣,可能是第二個列表的多個區間將位於第一個列表的單個區間中。

有什麼想法?

預先感謝您

+1

無需限定範圍內對於循環,R被矢量化:'dat $ start dat2 $ end'。 – lmo

回答

0

你可以使用any,看是否在list2中的行內的任何list1

sapply(1:NROW(list2), function(i) 
    any(list2$start[i] > list1$start & list2$end[i] < list1$end)) 
#[1] TRUE FALSE 

DATA

list1 = structure(list(start = c(100, 700), end = c(500, 800)), .Names = c("start", 
"end"), row.names = c(NA, -2L), class = "data.frame") 

list2 = structure(list(start = c(200, 800), end = c(300, 850)), .Names = c("start", 
"end"), row.names = c(NA, -2L), class = "data.frame") 
+0

它正在工作,非常感謝。 –