[英]Add column in first data frame based upon two columns in second data frame
我正在尝试根据第二个数据框向第一个数据框添加一列。 基本上,在数据框 1 中,我有值,这些值存在于数据框 2 中,但带有我想提取到数据框 1 中的附加信息。
在 MWE 下方:
Class <- c("Fruit", "Fruit", "Vegetable", "Vegetable")
Food_a <- c("Apple", "Banana", "Onion", "Carrot")
dt_a <- data.frame(Class, Food_a)
dt_a
Class Food_a
1 Fruit Apple
2 Fruit Banana
3 Vegetable Onion
4 Vegetable Carrot
Food_b <- c("Apple", "Bread", "Onion", "Banana")
dt_b <- data.frame(Food_b)
Food_b
1 Apple
2 Bread
3 Onion
4 Banana
所需的 output:
Food_b Class
1 Apple Fruit
2 Bread NA
3 Onion Vegetable
4 Banana Fruit
我已经查看了关于 SO 的其他问题,但我似乎无法让它们在我的示例中工作。 我能找到的关闭的是这两个: R dplyr:在一列中查找特定值,然后用该值替换右侧后续列中的相邻单元格,并将列中的 NA 替换为相邻列中的值。
由于我有两个数据框,我不确定如何应用它。
我想过使用ifelse
或case_when
但我不知道如何将它们链接到所需的Class
这是我到目前为止想到的:
dt_c <- dt_b %>% mutate(Class=(ifelse(dt_b$Food_b %in% dt_a$Food_a, dt_a$Class, NA)))
Food_b Class
1 Apple Fruit
2 Bread <NA>
3 Onion Vegetable
4 Banana Vegetable
如果有任何帮助和建议,我将不胜感激!
当您使用 tidyverse 时,您只需要一个left_join
...
dt_b %>% left_join(dt_a %>% rename(Food_b = Food_a))
Joining, by = "Food_b"
Food_b Class
1 Apple Fruit
2 Bread <NA>
3 Onion Vegetable
4 Banana Fruit
rename
是为了保证每个dataframe中都有一个同名的列用于join。 您还可以在left_join
中使用by
参数来实现相同的目的( dt_b %>% left_join(dt_a, by = c("Food_b" = "Food_a"))
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.