R语言中paste0与format组合使用出现多余空白的解决方法
问题产生原因
format() 函数默认开启了右对齐逻辑,会自动在长度较短的数值字符串前补充空格,让同一批次输出的所有字符串长度保持一致。你的数据中截距项的估计值是3位整数+两位小数共6个字符,而年龄、性别的估计值只有1位整数+两位小数共4个字符,因此自动补了2个前导空格,导致出现多余空白。
解决方法
方法1:给format()添加trim=TRUE参数
直接关闭format()的对齐补空格逻辑,不需要修改其他原有逻辑:
mydata <- mydata %>% mutate( label = paste0( format(round(estimate, 2), nsmall = 2, trim = TRUE), " (", format(round(conf_low, 2), nsmall = 2, trim = TRUE), "-", format(round(conf_high, 2), nsmall = 2, trim = TRUE), ")" ) )
方法2:使用sprintf()直接格式化输出(更推荐)
sprintf() 可以直接指定数值输出格式,不需要额外拼接+格式化的组合操作,代码更简洁,也不会产生多余空格:
mydata <- mydata %>% mutate( label = sprintf("%.2f (%.2f-%.2f)", estimate, conf_low, conf_high) )
运行后生成的label就是你需要的规范格式:
- 截距项对应:
518.38 (178.74-1503.36) - 年龄对应:
0.98 (0.93-1.03) - 性别对应:
1.07 (0.96-1.19)
方法3:事后删除多余空格
如果已经生成了带空格的标签,可以用字符串处理函数清除多余空白:
# 清除所有多余空格(包括字符串内部连续空格) mydata <- mydata %>% mutate(label = str_squish(label)) # 仅清除字符串前后的空格 mydata <- mydata %>% mutate(label = str_trim(label))
内容的提问来源于stack exchange,提问作者tcvdb1992
相关产品推荐
相关产品推荐

