2014-11-20 81 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

相關問題