r - 替换以匹配另一列为条件的列
问题描述
我想根据另一列匹配两列。我正在尝试使用该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
解决方案
首先,重命名 的数字列,b
以便可以合并两个数据框:
b <- b %>% rename(x = y)
然后,合并它们,将变量转换为字符并将列的值替换x
为z
if 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>
推荐阅读
- python - Django在数据库级别引用非字段值
- typescript - 无法使用 Babel 自定义别名导入 TypeScript 组件
- javascript - 单独的包形成动态导入的节点模块
- javascript - 如何在chart.js中从画布制作内部填充?
- oracle - 忽略 PL/SQL 函数的返回值
- spring-boot - 将 application.yml 值改为小写
- ef-core-3.0 - 配置集中实体
- python-3.x - 从 DataFrame 中获取一个明确的布尔值 - python3
- c++ - 一个从不终止有效 C++ 程序的程序是什么?
- python - 在python中继承泛型的类的目的是什么?