我如何在R中基于另一个 Dataframe 计算一个 Dataframe 的新列?

tyg4sfes  于 2023-03-10  发布在  其他
关注(0)|答案(3)|浏览(110)

我在根据另一个 Dataframe 的值向 Dataframe 添加新列时遇到了麻烦。我将尝试提供一个最小的、可复制的示例;当然,我真实的的 Dataframe 有很多其他的列,但我不认为它们在这里有什么关系。
假设我有两个 Dataframe DF 1和DF 2。

ID <- c(1, 2, 3, 4, 5)
material <- c("a", "b", "c", "d", "a")
DF1 <- data.frame(ID, material)

ID <- c("a", "b", "c", "d,")
group <- c("x", "x", "y", "z")
DF2 <- data.frame(ID, group)

ID是每个 Dataframe 中的唯一键。我想执行一个操作,将DF1$material与DF2$ID匹配,并向DF 1添加一列,其中包含DF2$group中的关联值。
因此,在上面的示例中,结果如下所示:

ID <- c(1, 2, 3, 4, 5)
material <- c("a", "b", "c", "d", "a")
group <- c("x", "x", "y", "z", "x")
DF1 <- data.frame(ID, material, group)

我更愿意使用tidyverse/dplyr来实现这一点,我尝试过inner_join和left_join,以及带有ifelse()语句的mutate(),这些连接会创建大量重复的列,而ifelse()会产生一个警告:“较长对象长度不是较短对象长度的倍数”。
我相信有一个显而易见的解决办法。我该怎么做呢?

xzlaal3s

xzlaal3s1#

DF1$newcolumn <- DF2$group[match(DF2$ID,DF1$material)]
guykilcj

guykilcj2#

您还可以使用merge(),它是R基本包的一部分

DF1<-merge(DF1, DF2, by.x = "material", by.y = "group")
gev0vcfq

gev0vcfq3#

我们可以使用不同的色谱柱

library(dplyr)
left_join(DF1, DF2, by = c("material" = "ID"))
   ID material group
1  1        a     x
2  2        b     x
3  3        c     y
4  4        d     z
5  5        a     x

相关问题