У меня есть два одиночных векторных кадра данных неравной длины
aa<-data.frame(c(2,12,35))
bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36))
Для каждого наблюдения в aa я хочу подсчитать количество случаев, когда bb меньше, чем aa
Мой результат:
bb<aa
1 1
2 7
3 9
Я смог сделать это двумя способами, создав функцию и применив ее, но мои наборы данных велики, и я позволяю одному работать всю ночь без конца.
Что я имею:
fun1<-function(a,b){k<-colSums(b<a)
k<-k*.000058242}
system.time(replicate(5000,data.frame(apply(aa,1,fun1,b=bb))))
user system elapsed
3.813 0.011 3.883
Во-вторых,
fun2<-function(a,b){k<-length(which(b<a))
k<-k*.000058242}
system.time(replicate(5000,data.frame(apply(aa,1,fun2,b=bb))))
user system elapsed
3.648 0.006 3.664
Вторая функция немного быстрее во всех моих тестах, но я позволил первой работать всю ночь на наборе данных, где bb> 1,7 м и aa> 160 КБ.
Я нашел этот пост, и пытался использовать with(), но, похоже, не смог заставить его работать, а также безуспешно пытался использовать цикл for.
Любая помощь или направление приветствуется.
Благодарю вас!
sapply(aa[[1]],function(x)sum(bb[[1]]<x))
? Это было бы лучше, если быaa
иbb
были очень векторными. - person jlhoward   schedule 05.12.2014