2

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

我有一个数据框,其中一列包含 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" )
4

4 回答 4

10

这在一行中完成

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

于 2014-01-20T04:46:19.393 回答
1

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

于 2019-01-13T14:48:33.703 回答
0

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

 change<-function(x, n=max(nchar(x))) gsub(" ", "0", formatC(x, width=n))
    icd92<-gsub(" ","",paste(change(icd9,5)))
于 2014-01-20T04:40:16.217 回答
0

您也可以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以制定正确的格式。
  • 由于此处的数值精度,存在一些引入错误的风险,尽管它在示例中运行良好。
于 2017-01-06T15:56:31.930 回答