2014-01-20 4 views
2

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

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