根据第二个数据框列中的匹配替换Dataframe列中的值

时间:2017-03-05 19:50:33

标签: r

我已经在Stack Overflow上看到了大约六个左右的解决方案,但是,所有处理单个数据帧中的匹配都使用'within'。我需要一个跨多个数据帧的解决方案:

我在数据框1的列中有值

  

DF1$A:“1,2,1,3,2,6,4,5,8,8,2,7,4等”

我有第二个数据框,其中包含这些代码的“密钥”

  

DF2$A:“1,2,3,4,5,6,7,8,9,10”

     

DF2$B:“馅饼,比萨饼,汉堡包等”

如何更改DF1$A中的值以匹配DF2$B中的值?

2 个答案:

答案 0 :(得分:5)

您可以使用match作为指向df2$B中特定位置的指针来执行此操作:

# make some toy data
set.seed(1)
df1 <- data.frame(A = sample(seq(3), 10, replace = TRUE))
df2 <- data.frame(A = seq(3), B = c("pizza", "hot dog", "hamburger"), stringsAsFactors = FALSE)

df1$B <- df2$B[match(df1$A, df2$A)]

结果:

> df1
   A         B
1  3 hamburger
2  1     pizza
3  2   hot dog
4  1     pizza
5  1     pizza
6  2   hot dog
7  1     pizza
8  2   hot dog
9  3 hamburger
10 2   hot dog

答案 1 :(得分:0)

您可以使用基数merge来按索引进行连接,而select中的dplyr可以用于子集并重命名:

library(tidyverse)

DF1 <- DF1 %>% 
  merge(DF2, by = "A") %>%
  select(-A, A = B)