【问题标题】:Integrate one table content into another [closed]将一个表格内容集成到另一个[关闭]
【发布时间】:2017-09-29 20:11:43
【问题描述】:

如何在不添加额外列的情况下合并两个 data.frames / 表的内容?

Example

谢谢!

【问题讨论】:

  • 请不要将您的数据作为图片发布。而是在您的 R 控制台中键入 dput(table1)dput(table2),然后通过编辑将它们的输出复制并粘贴到您的问题中。您可能还想查看这篇文章以提出可重复的问题:stackoverflow.com/questions/5963269/…
  • @user 感谢您的建议!我很感激。

标签: r join merge integrate


【解决方案1】:

这是dplyr的解决方案:

library(dplyr)
full_join(table1, table2, 
          by = c("Name", "Date", "ID")) %>%
  select(-Cost, -PNL) %>%
  rename(Item = ID)

结果:

   Name       Date Price   Item
1  <NA> 2017-09-29    33   <NA>
2  <NA> 2017-08-04     2    AMA
3  Pink       <NA>    NA F43346
4 Green       <NA>    NA KF3902

注意事项:

我的解决方案对数据集table1 andtable2 做了一些假设。例如Date是否已经转换为日期变量,NameID变量是否是字符类型而不是因子。因此,一旦 OP 提供数据,我将调整我的解决方案。

数据:

table1 = data.frame(Name = as.character(c(NA, NA)),
                    Date = as.Date(c("2017-9-29", "2017-8-4")),
                    Price = c(33, 2),
                    ID = c(NA, "AMA"),
                    stringsAsFactors = FALSE)

table2 = data.frame(Name = c("Pink", "Green"),
                    Cost = c(25, 876),
                    PNL = c(11, 252),
                    Date = as.Date(c(NA, NA)),
                    ID = c("F43346", "KF3902"),
                    stringsAsFactors = FALSE)

【讨论】:

  • 那行得通。谢谢!
  • @Tim 不要忘记通过单击向下投票按钮下的灰色复选标记来接受最佳答案 :)
【解决方案2】:

如果您想在两个数据集中按“ID”列合并,这对您有用。

merge(x = TABLE1, y = TABLE2[ , c("Name", "Date", "ID")], by = "ID", all=TRUE)

我在合并时对第二个数据集进行子设置。如果您想通过NameDateID 列合并,则可以执行以下操作:

merge(x = TABLE1, y = TABLE2[ , c("Name", "Date", "ID")], by = c("Name", "Date", "ID"), all=TRUE)

#Output
  Name       Date      ID   Price
1 Green       <NA>  KF3902    NA
2  Pink       <NA>  F43346    NA
3  <NA> 2017-08-04     AMA     2
4  <NA> 2017-09-29    <NA>    33

【讨论】:

  • 要得到 OP 想要的输出数据集,你其实想要all = TRUE
  • 我收到以下错误消息:“merge.data.table 中的错误(x = TABLE1, y = TABLE2[, "Name"], : by 中列出的元素必须是有效的列名在 x 和 y" - 名称完全相同。
  • @user 已更正。感谢您指出。
  • 我更正为“all = TRUE”。还是一样的错误。
  • @Tim 最好在您的问题中发布我们的数据,以便我们重现您的错误。当我们没有您使用的相同数据集时,很难判断出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2015-11-19
相关资源
最近更新 更多