Замена пропущенных значений в коде "."в кадре данных R - PullRequest
2 голосов
/ 19 февраля 2012

У меня есть фрейм данных с отсутствующими значениями, закодированными ".", И я хочу перекодировать значения как NA:

df <- data.frame("h"=c(1,1,"."))

Я пробую следующее:

df$h[df$h == "."] <- NA

Но NA отображается как <NA>, и я не могу выполнять такие команды, как mean(df$h,rm.na=TRUE)

Кто-нибудь знает, в чем проблема? Когда я перекодирую числа как NA, нет проблем

Спасибо!

Ответы [ 3 ]

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

Используйте функцию is.na.Нет необходимости преобразовывать в коэффициент, хотя тот факт, что у вас были символьные значения, приводил к тому, что вы хотели быть числовым.

> df <- data.frame("h"=c(1,1,"."))
> is.na(df) <- df=="."
> df
     h
1    1
2    1
3 <NA>

Я не уверен, почему @TylerRinker удалил свой ответ относительно использования 'na.strings ', так как я думал, что это правильный ответ.

Комментарий: Посмотрев на это год спустя, я понял, что a) ОП неправильно понял, как отображались пропущенные значения, когда они находятся в факторах или символьных векторах,и b) что основная проблема заключалась не в ошибке при перекодировании в R-пропущенное значение, которое код ОП уже правильно сделал правильно, а скорее в ошибке опечатки, обнаруженной @joran.

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

Проблема в том, что ваш столбец df $ h является фактором. Попробуйте сначала сделать его символом, а затем заменить значения ".":

df$h <- as.character(df$h)
df$h[df$h == "."] <- NA

Здесь вы видите результат:

df[is.na(df$h),]

Конечно, как только вы избавитесь от точек, вы можете преобразовать их в числовую переменную, чтобы вычислить ее, если хотите:

df$h <- as.numeric(df$h)
0 голосов
/ 17 ноября 2016

Да, верно, это фактор. сначала преобразуйте его в числовой с помощью приведенного ниже синтаксиса

df <- transform(df, h=as.numeric(h)) 

и замените пропущенное на ноль

df$h[is.na(df$h)] <- "0" and then view the data View(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...