我正在尝试找到一种更快的替代方法,以便将 X 数据框中的每个观察值 i 与观察值 j 进行比较。例如,运行以下代码
for(i in 1:nrow(X)){
for(j in 1:nrow(X)){
if ( (sum(c(X$Feature1[i], X$Feature1[j])) == 0)&& ((X$Feature2[i] == X$Feature2[j])|(X$Feature3[i] == X$Feature3[j]) ) ){
X$match[i]<-1
}}}
运行大约20,000个观察结果需要花费相当长的时间。 R中是否有任何人都知道的排序/比较算法?预先感谢您的宝贵时间!
答案 0 :(得分:2)
您可以在sql中或使用sqldf
在R中非常轻松地完成这种事情。
X$match <- seq(nrow(X))
library(sqldf)
X$match <- sqldf("
select sum(b.Feature1 is not null) > 0 as match
from X a
left join X b
on a.Feature1 + b.Feature1 = 0
and (
a.Feature2 = b.Feature2
or a.Feature3 = b.Feature3)
group by a.match
")[[1]]
基本R版本可能是
X$match <- as.numeric(
sapply(seq(nrow(X)), function(i){
any( (X$Feature1[i] + X$Feature1 == 0)
& (
(X$Feature2[i] == X$Feature2)
| (X$Feature3[i] == X$Feature3)))}))