我有两个数据集。一个看起来像这样:
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)相同的尺寸。例如,我想证明Sally在整个数据集中总共5次中对书1中的Jessie说了“ time”一词。最终表的布局如下所示:
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和编码的新手,所以我不知道所有适当的术语。我希望我所提供的示例对我的要求有意义。我已经尝试过各种版本的merge,inner_join和for循环,但似乎无法获得正确的答案。由于我不知道我要做什么才合适,因此我的搜索无济于事。
在此先感谢您的帮助!
答案 0 :(得分:1)
正如@thelatemail在其评论中指出的那样,Character
和Word
的内部联接似乎解决了您的主要问题:
result <- merge(df,df2,by=c("Character","Word"))
您可以使用Book
列中的值对列进行重新排序,
result <- result[order(result$Book),c(3,1,4,2,5,6)]