Добавление условных начальных или конечных нулей
Мне нужна помощь, условно добавляя начальные или конечные нули.
У меня есть датафрейм с одним столбцом, содержащим диагнозы 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)))