【问题标题】:Adding conditional leading or trailing zeros添加条件前导零或尾随零
【发布时间】:2014-01-20 03:38:09
【问题描述】:

我需要有条件地添加前导零或尾随零的帮助。

我有一个数据框,其中一列包含 icd9 诊断。作为一个向量,该列看起来像:

"33.27" "38.45" "9.25" "4.15" "38.45" "39.9" "84.1" "41.5" "50.3" 

我需要所有值的长度为 5,包括中间的句点(不包括“”)。如果值在句点之前有一位,则需要有一个前导零。如果值在句点后有一位,则末尾需要为零。所以结果应该是这样的:

"33.27" "38.45" "09.25" "04.15" "38.45" "39.90" "84.10" "41.50" "50.30" 

这是 R 的向量:

icd9 <- c("33.27", "38.45", "9.25", "4.15", "38.45", "39.9", "84.1", "41.5", "50.3" )

【问题讨论】:

  • 你为什么需要它?如果要导出到某些需要固定宽度记录的工具,则空格与零相同,并且可以使用 fwrite 轻松实现。如果要设置表格显示,请使用表格命令参数来设置对齐方式。

标签: r conditional trailing leading-zero


【解决方案1】:

一行代码完成

formatC(as.numeric(icd9),width=5,format='f',digits=2,flag='0')

【讨论】:

  • 是的,这是我一直在寻找的更好的方法。
【解决方案2】:

ICD-9 代码有一些格式怪癖,可能会导致对简单字符串处理的误解。 CRAN 上的 icd 包在进行 ICD 处理时处理了所有极端情况,并且已经被许多 R 用户使用了大约六年的时间。

【讨论】:

    【解决方案3】:

    使用这个名为 change 的函数接受最大字符数的参数,我认为它可以提供帮助

     change<-function(x, n=max(nchar(x))) gsub(" ", "0", formatC(x, width=n))
        icd92<-gsub(" ","",paste(change(icd9,5)))
    

    【讨论】:

    • icd92[6] 给出"039.9" - 看起来有问题。
    【解决方案4】:

    你也可以将向量转换成数值后使用sprintf

    sprintf("%05.2f", as.numeric(icd9))
    [1] "33.27" "38.45" "09.25" "04.15" "38.45" "39.90" "84.10" "41.50" "50.30"
    

    注意事项

    • ?sprint 中的示例以找出正确的格式。
    • 尽管在示例中运行良好,但由于此处的数值精度,存在引入错误的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2014-08-09
      相关资源
      最近更新 更多