2017-04-09 50 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