假设我有两个不同的数据集Data1
和Data2
。对于Data1$Incidents
中的每个条目,我想在Data2$Incidents
中找到与之匹配的行,并跟踪没有匹配的条目。随后,我将匹配的条目保存到新数据框Data1_Matches
中。现在,对于Data2$Incidents
中的每个条目,我会查找匹配的Data1_Matches$Incidents
条目,然后创建一个类似的数据框Data2_Matches
。
假设为了参数我的数据集如下所示:
Day Incidents
"Monday" 30
"Friday" 11
"Sunday" 27
我的算法目前如下所示:
Data1_Incs = as.integer(Data1$Incidents)
LEN1 = length(Data1_Incs)
No_Match = 0
for (k in 1:LEN1){
Incs = which(Data2$Incidents == Data1_Incs[k])
if (length(Incs) == 0){
No_Match = c(No_Match,k)
}
}
No_Match = No_Match[-1]
Data1_Match <- Data1[-No_Match,]
Data1_No_Match <- Data1[ No_Match,]
Data2_Incs = Data2$Incidents
LEN2 = length(Data2_Incs)
Un_Match = 0
for (j in 1:LEN2){
Incs = which(as.integer(Data1_Match$Incidents) == Data2_Incs[j])
if (length(Incs) == 0){
Un_Match = c(Un_Match, j)
}
}
Un_Match = Un_Match[-1]
Data2_Match <- Data2[-Un_Match,]
Data2_No_Match <- Data2[ Un_Match,]
在不使用for循环的情况下,完成此任务的更好方法是什么?作为参考,Data1
有大约15,000个条目,而Data2
接近200万。
答案 0 :(得分:3)
尝试使用setdiff
。
我将在第一个for循环中演示:
No_Match <- setdiff(unique(Data2$Incidents), unique(Data1$Incidents))
不确定这是否完全符合您的要求。