根据第二个数据框中的两列在第一个数据框中添加列
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
期望的输出:
Food_b Class
1 Apple Fruit
2 Bread NA
3 Onion Vegetable
4 Banana Fruit
我已经查看了关于 SO 的其他问题,但我似乎无法让它们在我的示例中起作用。我能找到的最后一个是这两个: and Replace NA in column with value in adjacent column.
因为我有两个数据框,所以我不确定如何应用它。
我考虑过使用 ifelse
或 case_when
,但我不知道如何 link 将这些 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中都有一个同名的column用于join。您还可以在 left_join
中使用 by
参数来实现相同的目的 (dt_b %>% left_join(dt_a, by = c("Food_b" = "Food_a"))
)。
我正在尝试根据第二个数据框向第一个数据框添加一列。 基本上,在数据框 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
期望的输出:
Food_b Class
1 Apple Fruit
2 Bread NA
3 Onion Vegetable
4 Banana Fruit
我已经查看了关于 SO 的其他问题,但我似乎无法让它们在我的示例中起作用。我能找到的最后一个是这两个:
因为我有两个数据框,所以我不确定如何应用它。
我考虑过使用 ifelse
或 case_when
,但我不知道如何 link 将这些 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中都有一个同名的column用于join。您还可以在 left_join
中使用 by
参数来实现相同的目的 (dt_b %>% left_join(dt_a, by = c("Food_b" = "Food_a"))
)。