【问题标题】:Merging dataframes by a vector of dataframe names通过数据框名称的向量合并数据框
【发布时间】:2018-05-27 14:16:01
【问题描述】:

我正在尝试合并大约 30 个数据帧。

我已经将全局环境保存为向量,逗号分隔,如下;

df_names <- (df1, df2, df3, df4)

现在我正在尝试合并所有这些数据框

total <- merge(df_names, by = 'ID')

但我遇到了一个错误;

Error in as.data.frame(y) : argument "y" is missing, with no default

【问题讨论】:

  • 查看?mget 将它们放入列表中
  • mget + Reduce 应该这样做。

标签: r merge


【解决方案1】:

将 cmets 转换为答案,您可能正在寻找 mgetReduce 以及 merge 的组合。

演示:

df1 <- data.frame(ID = 1:3, var = c("a", "b", "c"))
df2 <- data.frame(ID = c(1, 3, 4), var = c("A", "B", "X"))
df3 <- data.frame(ID = c(2, 3, 4, 5), var = c("X", "Y", "Z", "A")) 
df4 <- data.frame(ID = 1:5, var = letters[1:5])
Reduce(function(x, y) merge(x, y, by = "ID", all = TRUE), mget(paste0("df", 1:4)))
#   ID var.x var.y var.x var.y
# 1  1     a     A  <NA>     a
# 2  2     b  <NA>     X     b
# 3  3     c     B     Y     c
# 4  4  <NA>     X     Z     d
# 5  5  <NA>  <NA>     A     e
# Warning message:
# In merge.data.frame(x, y, by = "ID", all = TRUE) :
#   column names ‘var.x’, ‘var.y’ are duplicated in the result

【讨论】:

  • 我尝试在我的数据帧上运行它,它只是重现数据帧名称:我目前有; df_names &lt;- names(which(unlist(eapply(.GlobalEnv,is.data.frame)))) 这给了我 df_names 的列表。然后我通过df_names &lt;- paste(as.character(df_names),collapse=", ",sep="") 整理它,所以我有一个数据帧名称列表,例如df1, df2, df3, df4 等,在这里我想打电话给total &lt;- merge(df_names, by = 'PANID'),但我收到一个错误。
  • @user113156,你为什么要把名字粘贴在一起?为什么不把它作为一个向量呢?尝试Reduce(function(x, y) merge(x, y, by = "ID", all = TRUE), mget(df_names))你做df_names &lt;- paste(as.character(...), ...)
  • 是的,谢谢!但是由于df太大而使我的计算机崩溃了,但是它起作用了!谢谢
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 2019-08-11
  • 2013-02-16
  • 1970-01-01
  • 2018-04-12
  • 2015-11-09
相关资源
最近更新 更多