【发布时间】: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 %>% group_by(ID) %>% summarise(score = sum(as.numeric(as.character(score))), tieColor = first(tieColor), rainyDay = first(rainyDay))。请注意,您的“分数”列是factor -
谢谢你帮我做的