使用dplyr的mutate+across替换指定列NA值遇阻求助
解决方法:修正
across语法与replace_na调用 首先看你代码里的两个关键问题:
- 括号位置错误:你把
across()的闭合括号放在了列选择器之后,导致mutate()接收到了两个独立的参数(across(...)和~replace_na(...)),这不符合dplyr的语法规则。 replace_na参数缺失:replace_na()需要两个核心参数——要处理的向量(也就是当前迭代的列,用.x表示)和替换值,只传999是不完整的调用。
正确代码
library(tidyverse) tbf <- tibble( ab = c(1,3,NA), ac = c(23,NA,33), d = c(22,22,NA), ads = c('ds', NA, "dwe") ) tbf %>% mutate(across(starts_with('a') & where(is.numeric), ~replace_na(.x, 999)))
执行结果
# A tibble: 3 × 4 ab ac d ads <dbl> <dbl> <dbl> <chr> 1 1 23 22 ds 2 3 999 22 NA 3 999 33 NA dwe
可以看到,ab和ac列的NA已被替换为999,字符型的ads列和名字不以a开头的d列都保持原样,完全符合你的需求。
补充优化写法
如果你想更明确指定只处理ab和ac列,也可以直接列出来,可读性会更强:
tbf %>% mutate(across(c(ab, ac), ~replace_na(.x, 999)))
内容的提问来源于stack exchange,提问作者user14306090
相关产品推荐
相关产品推荐

