首页 > 解决方案 > 替换以匹配另一列为条件的列

问题描述

我想根据另一列匹配两列。我正在尝试使用该match函数但获得 NA 值。

a <- data.frame( x =  c(1,2,3,4,5)) 
b <- data.frame( y =  c(3,4),
                 z = c("A","B"))

a$x <- b$z[match(a$x, b$y)]

I get:
> a
     x
1 <NA>
2 <NA>
3    A
4    B
5 <NA>
I would like :
> a
     x
1    1
2    2
3    A
4    B
5    5

标签: rdataframemerge

解决方案


首先,重命名 的数字列,b以便可以合并两个数据框:

b <- b %>% rename(x = y)

然后,合并它们,将变量转换为字符并将列的值替换xzif not NA 的值。

a <- merge(a, b, by = "x", all.x = TRUE) %>% 
  mutate_all(as.character) %>% 
  mutate(x = ifelse(is.na(z), x, z))

结果:

  x    z
1 1 <NA>
2 2 <NA>
3 A    A
4 B    B
5 5 <NA>

推荐阅读