r - 避免 R 中的 for 循环

标签 r

假设我有两个不同的数据集 Data1Data2。对于 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/

相关文章:

python - 从网站抓取表格

r - rcpp中的排列顺序

r - 为什么我不能在 R 中使用 ifelse 分配函数?

r - 在hadoop系统中实现R程序

r - hclust 大小限制?

r - %like% 在 r 中有多个模式

r - 具有纵横比 1 和轴刻度的图像绘图函数

R:合并大数据框

r - 异步写入R中的文件

r - 编写小插图时如何使用 R 包自己的数据