【发布时间】:2019-02-22 00:11:05
【问题描述】:
我有两个数据集。一个看起来像这样:
df <- data.frame(Book=c(1,1,1,2,2,2,3,3,3),
Character=c('Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda'),
Target=c('Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally'),
Word=c('time', 'good', 'like', 'time', 'good', 'like', 'time', 'good', 'like'),
Total=c(1,2,4,2,4,3,2,4,4))
另一个看起来像这样:
df2 <- data.frame(Character=c('Sally', 'Jessie', 'Linda'),
Word=c('time', 'good', 'like'),
AllTotal=c(5,10,11))
我想要做的是合并集合,保持与 df + 1 新列(AllTotal)相同的维度。例如,我想展示在整个数据集中总共 5 次中,Sally 在第 1 册中对 Jessie 说了 1 次“时间”这个词。最终的表格布局应该是这样的:
df3 <- data.frame(Book=c(1,1,1,2,2,2,3,3,3),
Character=c('Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda'),
Target=c('Jessie', 'Sally', 'Jessie', 'Jessie', 'Sally', 'Sally', 'Jessie', 'Linda', 'Sally'),
Word=c('time', 'good', 'like', 'time', 'good', 'like', 'time', 'good', 'like'),
Total=c(1,2,4,2,4,3,2,4,4),
AllTotal=c(5,10,11,5,10,11,5,10,11))
我需要某种合并或匹配代码,这样每当 df2 中的“word”与 df 中的“word”匹配时,就会在 df (AllTotal) 中创建一个新列,用于放置 df2 中的相应 AllTotal 值。
我的实际数据集不像我的示例那样以一致的模式运行,所以我不能像我在示例中那样重复 AllTotal 值。
我是 R 和编码的新手,所以我不知道所有正确的术语。我希望我所问的问题从我提供的示例中是有意义的。我尝试了各种版本的合并、inner_join 和 for 循环,但似乎无法得到正确的答案。由于我不知道我正在尝试做的事情的正确术语是什么,所以我的搜索没有帮助。
提前感谢您的帮助!
【问题讨论】:
-
我很确定你想要的只是一个内部连接,因为
merge(df,df2,by=c("Character","Word"))似乎与你的df3结果相匹配。是不是出了什么问题,这意味着这不起作用? -
我认为这很有效,尽管它重新排列了我的列顺序(没什么大不了的)。我不知道在 by= 中使用 c() 并且在合并没有达到我想要的效果时尝试使用疯狂的 for 循环进行匹配。谢谢!