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
相关产品推荐
相关产品推荐

