Удалите записи, начинающиеся с символа (Vxxx), чтобы включить команду floor () в R - PullRequest
2 голосов
/ 19 февраля 2012

Я работаю с данными кодов отделения неотложной помощи ICD-9 (диагностика состояния здоровья), которые представляют собой трехзначные коды с точностью до 2 десятичных знаков после (примеры: 499, 499.1, 499.51 и т. Д.).Некоторые специальные коды имеют букву «V» вместо первой цифры, например «V10.46».

В каждом посещении отделения неотложной помощи (строке) может быть до 11 кодов диагнозов (столбцов), поэтому я использовалReshape (), чтобы изменить набор данных в длинный формат.Теперь я хочу использовать floor (), чтобы удалить эти десятичные точки.Но R не может связать что-то с персонажем!Я получаю эту ошибку: Ошибка в Math.factor (dtl $ diag): пол не имеет значения для факторов

Этот пост имел какое-то отношение, но мне интересно, есть ли лучший способ? R: Удалить наблюдения за персонажами в переменной

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 19 февраля 2012

Вы можете использовать регулярное выражение, чтобы удалить точку и все после.

x <- c("499", "499.1", "499.51", "V10.46")
gsub("\\..*", "", x)
# Output:
# [1] "499" "499" "499" "V10"
3 голосов
/ 19 февраля 2012

Построение превосходного ответа @Vincent Zoonekynd: если целью было использовать floor для данных, вы можете просто убрать V и вызвать floor для остальных:

x <- c("499", "499.1", "499.51", "V10.46")
# replace all occurences of "V" with nothing ("") in x:
x.stripped <- gsub("V", "", x) 
# convert to numeric so we can use floor():
x.floor <- floor(as.numeric(x.stripped))

Исходя из вашего сообщения об ошибке «не имеет значения для факторов», этот столбец ваших данных был прочитан как строки (из-за «V» в некоторых строках), а поведение R по умолчанию заключается в преобразовании строковых столбцов вфакторы (например, категории).

Если вы получаете сообщение о том, что gsub не работает с факторами, вам необходимо сначала преобразовать столбец в строки:

mydf$columname <- as.character(mydf$columnname)

А затем вы можете продолжитькак и раньше.

1 голос
/ 19 февраля 2012

Для первых трех букв вы можете использовать функцию подстроки.

icd9 <- factor(c("499", "499.1", "499.51", "V10.46"))
substr(as.character(icd9),1,3)# as.character is used 
                              # because icd9 is factor in your data

Вывод

[1] "499" "499" "499" "V10"
...