繁体   English   中英

根据第二个数据框中的两列在第一个数据框中添加列

[英]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 替换为相邻列中的值

由于我有两个数据框,我不确定如何应用它。

我想过使用ifelsecase_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM