2017-04-09 48 views
0

發現值I有一個數據幀xř從間隔

begin end 
1  1 3 
2  5 6 
3 11 18 

和向量​​v <- c(1,2,5,9,10,11,17,20) 我想找到從向量是任何從數據幀間隔的元素的所有值。所以我想得到一個矢量c(1,2,5,11,17)。這怎麼可能?

+0

你的間隔是否不重疊?參見'?findInterval' - 'v [findInterval(v,x $ begin)==(findInterval(v,x $ end)+ 1L)]' –

回答

1

我們可以使用Map來獲取序列相應之間,begin/end值在listunlistlist和使用intersect得到的元素共同既vector小號

intersect(unlist(Map(`:`, x$begin, x$end)), v) 
#[1] 1 2 5 11 17 
2

要獲得逐行值上MARGIN1使用applyintersect

apply(df, 1, function(a) intersect(v, a[1]:a[2])) 
#[[1]] 
#[1] 1 2 

#[[2]] 
#[1] 5 

#[[3]] 
#[1] 11 17 

unlist得到一個載體

unlist(apply(df, 1, function(a) intersect(v, a[1]:a[2]))) 
#OR 
intersect(v, unlist(apply(df, 1, function(a) a[1]:a[2]))) #as commented by akrun 
#[1] 1 2 5 11 17 
+1

我想你可以在'unlist'ing後調用'intersect' ' – akrun