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

R语言dplyr处理数据表时如何将NA替换为-且保留US $前缀及两位小数

问题原因

  • 你注释掉的替换NA代码执行顺序有误,放在数值格式化逻辑前执行会提前将数值列转为字符型,导致后续的sprintf数值格式化、加前缀的逻辑无法生效
  • 直接使用sprintf处理NA值后,生成的空值可以直接在同一步骤完成替换,无需额外全列转换处理

修正代码

写法1(无需额外依赖包,用base R函数实现)

library(dplyr)

Test <- structure(list(date2 = structure(c(18808, 18808, 18809, 18810
), class = "Date"), Category = c("FDE", "ABC", "FDE", "ABC"), 
coef1 = c(445.23231, 1.31231, 6.32323, 1.232),coef2 = c(8.3231, 3.3432, 1.3233, NA)), row.names = c(NA, 4L), class = "data.frame")

Test %>%
  mutate(sum = rowSums(across(3:last_col()), na.rm = TRUE), 
         across(where(is.numeric), ~ifelse(is.na(.x), "-", sprintf("US $%.2f", .x))))

写法2(用replace_na实现,逻辑更简洁,需要加载tidyr包)

library(dplyr)
library(tidyr)

Test %>%
  mutate(sum = rowSums(across(3:last_col()), na.rm = TRUE), 
         across(where(is.numeric), ~replace_na(sprintf("US $%.2f", .x), "-")))

最终输出结果

date2 Category      coef1    coef2        sum
1 2021-06-30      FDE US $445.23 US $8.32 US $453.56
2 2021-06-30      ABC   US $1.31 US $3.34   US $4.66
3 2021-07-01      FDE   US $6.32 US $1.32   US $7.65
4 2021-07-02      ABC   US $1.23        -   US $1.23

内容的提问来源于stack exchange,提问作者user17163779

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:02