【问题标题】:Merging many dataframes with two equal columns but one specific column in R将许多数据帧与两个相等的列合并,但 R 中的一个特定列
【发布时间】:2021-02-03 16:06:17
【问题描述】:

我有 20 个不同的数据框,它们有两个相等的列(年份,rn),但每个 DF 中的一列名称略有不同(pci1995$complexity_index_productpci1995$complexity_index_product 等)。

我想要一个包含三列的数据框,它基本上将所有数据框合并在一起(rnyearpci) 当我尝试时:

pci_allyears<-bind_rows(pci_df1995,
  pci_df1996,
  pci_df1997,
  pci_df1998,)

我得到了一年和 rn 列的所有值,但不幸的是,每个 pci 列仍然显示为单独的列,因为它们当然不相同(每年不同)。如何解决这个问题,使其只有三列?

【问题讨论】:

  • 您能否使用dput(head(pci_df1997))dput(head(pci_df1998)) 发布可能两个数据帧的样本? dplyr::bind_rows 应该在这里工作。

标签: r dplyr


【解决方案1】:

为所有数据提供相同的列名。首先,将所有数据框放在一个列表中。我假设它们具有相同的命名约定pci_df****,其中* 是数字,并且它是具有变量名称的第三列。

pci_df = mget(ls(pattern = "pci_df[0-9]{4}"))
pci_df = lapply(pci_df, setNames, c("year", "rn", "complexity_index"))
pci_df = bind_rows(pci_df)

我建议阅读我在How to make a list of data frames FAQ 上的回答,以获得更多背景信息和相关建议。

【讨论】:

  • 非常感谢您的快速回答,真的挽救了我的一天!对此进行跟进:我有类似的信息,这些信息首先存储在每年的列表中,然后需要将其转换为数据框,然后才能使用您上面提供的命令。我尝试使用 mget(ls(pattern) 来获取列表,但不知何故不起作用:
  • 命令是:eci_df1995%mutate(year="1995") eci_df1996 %mutate(year="1996") 然后我使用 eci_df=mget 。但是我可以不用每年复制粘贴命令吗?
  • 请在另一个问题中发布可重现的示例。我不知道这里发生了什么。如果mget(ls(pattern = ...)) 不起作用,那么您使用的模式不能与名称匹配。
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2021-12-30
  • 2019-02-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
相关资源
最近更新 更多