2014-11-20 85 views
1

我有指数的两份名单:找到最大的小元素

> k.start 
[1] 3 19 45 120 400 809 1001 
> k.event 
[1] 3 4 66 300 

我需要的是包含,在k.start小于或等于它的k.event,最大值每个元素的列表。期望的结果是

k.desired = c(3,3,45,120) 

所以,我试图复制该代码,除了没有一个for循环:

for (i in 1:length(k.start){ 
    k.start[max(which(k.event[i] > k.start))] 
} 

谢谢!

+4

见'findInterval'对于这样的任务?; 'k.start [findInterval(k.event,k.start,all.inside = T)]' – 2014-11-20 22:04:06

回答

2

你可以使用

vapply(k.event, function(x) max(k.start[k.start <= x]), 1) 
# [1] 3 3 45 120 
+0

谢谢!很棒。 – 2014-11-20 22:21:14

相关问题