使用 for 循环根据一列中的唯一值合并两个数据框

Merge two dataframes based upon unique values in one column using a for loop

我有两个数据框,它们都包含一个名为“new_id”的列 在两个数据帧

中,“new_id”的每个唯一值都有 100 行,有时甚至是 1000 行

我想合并基于此列的两个数据框,但如果我采用蛮力方法使用:

df3 <- merge(df1, df2, by = "new_id")

我运行内存问题。

我创建了一个仅包含一个 new_id 值的 df2 子集,并将其与 df1 成功合并。所以,我想我想出了一个使用 for 循环的解决方案。但是,我不确定如何构建它,因为我是 R 的初学者。

我认为循环应该做的是首先为 new_id 的每个唯一值设置子集 df2,然后将该子集数据帧与 df1 合并,将结果存储在列表中。在循环的每次迭代中,列表将为每个 new_id 添加每个新数据帧。最后,我会将列表绑定到它自己的“主”数据框中。

我不知道这是否正确,但我想出了这个循环作为基本结构和潜在的起点:

datalist = list()

for(i in unique(Procs_OP$new_id)){
    df <- subset(Procs_OP, new_id %in% Procs_OP$new_id))
    df2 <- merge(step2, df, by="new_id", all.step2=TRUE)    
    datalist[[i]] <- df2
}

df3 = do.call(rbind, datalist)

subset 应该在 i 上,因为这里的 iunique 元素循环

un1 <- unique(Procs_OP$new_id)
datalist <- vector('list', length(un1))
names(datalist) <- 
for(i in un1){
    df <- subset(Procs_OP, new_id %in% i))
    df2 <- merge(step2, df, by="new_id", all.step2=TRUE)    
    datalist[[i]] <- df2
}