Добавление условных начальных или конечных нулей

Мне нужна помощь, условно добавляя начальные или конечные нули.

У меня есть датафрейм с одним столбцом, содержащим диагнозы 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" )

3 ответа

Это делает это в одну строку

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

Коды ICD-9 имеют некоторые особенности форматирования, которые могут привести к неправильной интерпретации с простой обработкой строк. Пакет icd в CRAN отвечает за все основные случаи, возникающие при обработке ICD, и был испытан в бою в течение шести лет использования многими пользователями R.

Вы также можете использовать 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 чтобы получить работу в правильном формате.
  • Здесь есть некоторый риск внесения ошибок из-за точности чисел, хотя в этом примере это хорошо работает.

Используя эту функцию под названием change, которая принимает аргумент максимального количества символов, я думаю, что это может помочь

 change<-function(x, n=max(nchar(x))) gsub(" ", "0", formatC(x, width=n))
    icd92<-gsub(" ","",paste(change(icd9,5)))
Другие вопросы по тегам