如何使用modify_if为字符型dataframe添加千位分隔符
报错原因
modify_if() 第一个位置的谓词函数是作用于整个列的,你传入的~ nchar(.x) >3会对整列每个元素计算长度,返回一个长度和列行数相等的逻辑向量,不符合modify_if要求谓词返回单个布尔值的规则,所以触发报错。
解决思路
你需要的是对每个单元格单独做判断和修改,所以不需要用对列做筛选的modify_if,而是对所有列遍历,再对列内的每个元素做条件处理即可。
可运行代码示例
library(tidyverse) library(stringi) # 处理逻辑 result <- dataframe %>% # 遍历所有列 mutate(across(everything(), ~map_chr(., function(cell) { # 判断单元格内容是不是纯数字,且长度大于3 if (stri_detect_regex(cell, "^\\d+$") && nchar(cell) > 3) { # 转数值后格式化千位分隔符为空格 format(as.numeric(cell), big.mark = " ", scientific = FALSE) } else { # 不符合条件直接返回原内容 cell } })))
结果验证
运行后即可得到预期结果:纯数字且长度大于3的内容会被插入空格作为千位分隔符,非数字的s和长度不足的数字都会保留原样。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

