Aru*_*run 1 optimization r vector
我是R的新手,我正在努力找到一个更好的解决方案来有效地完成这个相当简单的任务.
我有一个data.frame M与100,000线(和多列,其中有2列是相关的这个问题,我会打电话给它M1,M2).我有另一个包含大约10,000个元素的data.frame列V1对此任务至关重要.我的任务是:
对于每个元素V1,找到它出现在哪里M2并拉出相应的元素M1.我能够使用for-loop做到这一点,它非常慢!我已经习惯了Matlab和Perl,这对R来说是永恒的!当然有更好的方法.我很感激任何有价值的建议来完成这项任务......
for (x in c(1:length(V$V1)) {
start[x] = M$M1[M$M2 == V$V1[x]]
}
Run Code Online (Sandbox Code Playgroud)
只有一个元素匹配,因此我可以使用逻辑语句直接获取开始向量中的元素.我该如何对此进行矢量化?
谢谢!
这是@aix使用相同示例的另一种解决方案.
M[match(V$V1, M$M2),]
为了测试性能,我们可以使用R包rbenchmark.
library(rbenchmark)
f_ramnath = function() M[match(V$V1, M$M2),]
f_aix = function() merge(V, M, by.x='V1', by.y='M2', sort=F)
f_chase = function() M[M$M2 %in% V$V1,] # modified to return full data frame
benchmark(f_ramnath(), f_aix(), f_chase(), replications = 10000)
test replications elapsed relative
2 f_aix() 10000 12.907 7.068456
3 f_chase() 10000 2.010 1.100767
1 f_ramnath() 10000 1.826 1.000000
Run Code Online (Sandbox Code Playgroud)