【问题标题】:Merging different length data sets in R by matching values in columns?通过匹配列中的值来合并R中不同长度的数据集?
【发布时间】: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 循环进行匹配。谢谢!

标签: r merge


【解决方案1】:

正如@thelatemail 在他们的评论中指出的那样,CharacterWord 的内部连接似乎解决了您的主要问题:

result &lt;- merge(df,df2,by=c("Character","Word"))

您可以使用以下命令根据Book 列中的值对列重新排序:

result &lt;- result[order(result$Book),c(3,1,4,2,5,6)]

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 2016-02-24
    • 2023-04-06
    • 1970-01-01
    • 2023-03-05
    • 2020-03-23
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多