删除多个数据帧的重复行

时间:2017-02-10 16:18:18

标签: r

我有超过100个数据帧(df1, df2, df3, ....),每个数据帧包含相同的变量。我想循环遍历所有这些并删除id的重复项。对于df1,我可以这样做:

df1 <- df1[!duplicated(df1$id), ]

我怎样才能以有效的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

如果您正在处理100个类似结构的data.frames,我建议您不要将它们唯一地命名,而是将它们放在列表中。

假设它们都被命名为df和一个数字,那么您可以轻松地将它们分配给列表,其中包含:

df_varnames <- ls()[ grep("^df[0-9]+$", ls()) ]

或者,正如@MatteoCastagna在评论中所建议的那样:

df_varnames <- ls(pattern = "^df[0-9]+$")

(既快又干净)。然后:

dflist <- sapply(df_varnames, get, simplify = FALSE)

从这里开始,你的问题很简单:

dflist2 <- lapply(dflist, function(z) z[!duplicated(z$id),])

如果您必须将它们作为单独的data.frames处理(再次,不鼓励,几乎总是在不添加任何功能的情况下减慢处理速度),您可以尝试这样的hack(使用上面的df_varnames):< / p>

for (dfname in df_varnames) {
  df <- get(dfname)
  assign(dfname, df[! duplicated(df$id), ])
}

当我考虑使用它时,我感到畏缩,但我承认我可能不了解你的工作流程。