【问题标题】:R - Add column to a first data.frame based on another data.frame sharing a similar column but with a different length [duplicate]R - 基于共享相似列但长度不同的另一个data.frame将列添加到第一个data.frame [重复]
【发布时间】:2018-05-04 15:29:59
【问题描述】:

我有一个第一个 data.frame d1,其中包含每个生物体的 2 个数字(A 和 B)。

Organism1 <- c("name1", "name3", "name5") 
Number1 <- c("numberA1", "numberA3", "numberA5") 
Number2 <- c("numberB1", "numberB3", "numberB5") 
d1 <- data.frame(Organism1, Number1, Number2)
d1

我有第二个 data.frame d2 包含每个生物体的状态

Organism2 = c("name1", "name2", "name3", "name4", "name5", "name6")
Status = c("Bad", "Good", "Neutral", "Good", "Good", "Bad")
d2 = data.frame(Organism2, Status)
d2

我想“合并”这两个 data.frame 以获得第三个名为 d3 的,对应于 d1 + Status

Organism3 = c("name1", "name3", "name5") 
Number1 = c("numberA1", "numberA3", "numberA5") 
Number2 = c("numberB1", "numberB3", "numberB5") 
Status3 = c("Bad", "Neutral", "Good")
d3 = data.frame(Organism1, Number1, Number2, Status3) 
d3

这个想法只是将状态列添加到d1 中的每个生物体。 对于每个不在d2 中的d1 有机体,只需将NA 放入d3

我查看了merge函数但没有成功获得我想要的。

【问题讨论】:

  • 现在还没有实际意义,但您应该展示一下您对merge 的尝试。这将帮助我们了解您的困惑所在,并解释您不理解的部分,而不仅仅是展示解决方案。

标签: r dataframe join merge


【解决方案1】:

使用merge 你会得到这个输出:

merge(d1,d2,by.x="Organism1",by.y="Organism2", all.x=T)
  Organism1  Number1  Number2  Status
1     name1 numberA1 numberB1     Bad
2     name3 numberA3 numberB3 Neutral
3     name5 numberA5 numberB5    Good

但是在您想要的输出d3 中,您在Status 中有不同的值,您的逻辑是什么?

【讨论】:

  • 我的错误,刚刚编辑了我的帖子。感谢您的回答!
【解决方案2】:

dplyr 库中的full_join() 就是为此而生的:

d1 %>%
  full_join(d2, by = c("Organism1" = "Organism2"))

left_join() 返回类似的内容,但仅包含出现在 d1 中的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多