我有超过100个数据帧(df1, df2, df3, ....
),每个数据帧包含相同的变量。我想循环遍历所有这些并删除id
的重复项。对于df1
,我可以这样做:
df1 <- df1[!duplicated(df1$id), ]
我怎样才能以有效的方式做到这一点?
答案 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), ])
}
当我考虑使用它时,我感到畏缩,但我承认我可能不了解你的工作流程。