2014-01-20 145 views
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") 
+0

爲什麼你需要那個?如果要導出到某些需要固定寬度記錄的工具,則空格與零相同,並且可以通過'fwrite'輕鬆實現。如果要設置表格顯示,請使用表格命令參數來設置對齊。 –

回答

0

使用此函數調用的變化,接受字符的最大數量的說法,我認爲它可以幫助

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

'icd92 [6]'給出''039.9「' - 看起來有問題。 – thelatemail

8

這確實是在同一行

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

+0

是的,這是我尋找的更好的方式。 – thelatemail

+0

謝謝!這實際上是完美的作品,只有一行代碼! –

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的例子讓制定出正確的格式。
  • 這裏有一些由於數值精度引入錯誤的風險,雖然它在這個例子中效果很好。