You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:52:52