【问题标题】:dplyr join without increasing row countdplyr 加入而不增加行数
【发布时间】:2015-09-04 08:31:59
【问题描述】:

我有两个不同的数据框 A 和 B。

A 表的特点

ID  Total Sum

B 表为每个 ID 和各种属性提供多个条目

ID  Attribute 1  Attribute 2  Attribute 3

我想将 A 连接到 B,只返回 A 表上我的总列旁边的 B 中的一行,但这样做时,我最终会在表 A 上重复 ID 值。

我尝试了 dplyr 备忘单上的所有连接,但无法正常工作。

在可重现示例和所需输出下方

表 A

TableA<-data.frame(ID=c("KM001","KM002","KM003"))

TableB<-data.frame(ID=c("KM001","KM002","KM003","KM002","KM003","KM002","KM003"),score=c("100", "20", "10", "20", "10", "20", "10"), tieColor=c("blue", "red", "blue", "orange", "purple", "black", "pink"),rainyDay=c("yes", "yes", "yes", "no", "no", "no", "no"))

期望的输出

Desired<-data.frame(ID=c("KM001","KM002","KM003"),TotalScoreSum=c("100","60","30"),tieColor=c("blue", "red", "blue"),rainyDay=c("yes", "yes", "yes"))

如果您认为 excel 相当于对表 A 和 B 以及 TotalScoreSum 的 id 进行 sumif,而对于其他两个“tieColor”和“rainyDay”属性,则 vlookup 仅检索每列的第一个匹配项。

【问题讨论】:

  • 加入时总是会发生这种情况,因为加入方法不“知道”要从 B 中选择哪一行。您应该通过从 B 中获取仅在行上的子集来指定要加入的行每个 ID。然后将该子集加入 A。
  • 请提供可重现的示例和所需的输出
  • 抱歉,我现在包含了一个可重复的和所需的输出
  • 这似乎是一个聚合问题,而不是一个加入问题。您可以像这样创建您的预期输出:TableB %&gt;% group_by(ID) %&gt;% summarise(score = sum(as.numeric(as.character(score))), tieColor = first(tieColor), rainyDay = first(rainyDay))。请注意,您的“分数”列是 factor
  • 谢谢你帮我做的

标签: r dplyr


【解决方案1】:

谢谢,问题是聚合问题。 docendo discimus 解决方案工作正常。

TableB %>% group_by(ID) %>% summarise(score = sum(as.numeric(as.character(score))), tieColor = first(tieColor), rainyDay = first(rainyDay))

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2021-05-31
    • 2020-06-24
    • 2018-02-18
    • 2018-07-25
    相关资源
    最近更新 更多