假设我有两个不同的数据集 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 万个条目。
最佳答案
尝试使用setdiff
。
我将演示第一个 for 循环:
No_Match <- setdiff(unique(Data2$Incidents), unique(Data1$Incidents))
不确定这是否完全满足您的要求。
关于r - 避免 R 中的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820787/