R: означает, когда условия получили NA - PullRequest
1 голос
/ 27 мая 2011

Спасибо за предыдущие посты и профессиональные ответы. Я могу почти сделать свой анализ, кроме тех условий с NA. Вот мой data.frame и используемый код. Не могли бы вы научить меня, как решить проблему, когда условие содержит значение NA?

 df1 <- data.frame(A = c(1,2,4, 5), B=c(1,3,NA,1), C=c(1,1,3, NA), D=c(1,1,2,2))

Используя этот код, я получаю df1 следующим образом:

  A  B  C D
1 1  1  1 1
2 2  3  1 1
3 4 NA  3 2
4 5  1 NA 2

С помощью Andrie, Sacha Epskamp и Chase ( R: получить средний столбец A на основе диапазона значений в столбце B ), я получил средние значения A, когда D находится между 1 и 3 в данном случае 2 с этим кодом.

mean(df1$A[df1$D>1 & df1$D<3])

Я получил ответ как 4,5, как и ожидалось (среднее значение 4 и 5 в столбце A).

Однако, когда я заменяю столбец D на столбец C, который содержит NA. Мой ответ может быть только NA. в то время как я ожидал увидеть средний ответ 1 и 2, пренебрегая 3-й строкой (больше 2) и 4-й строкой (с NA) в столбце C.

mean(df1$A[df1$C>0 & df1$C<2])

R> NA (i expect the count to be 1.5)

Я знаю, na.omit может удалить все строки с na в любых записях в df1. Однако я предпочитаю этого не делать, так как я также хотел бы получить среднее значение и число для каждого столбца, когда запись в одном столбце равна NA. (Например, я также хочу провести анализ среднего значения (df1 $ A, [is.na (df1 $ C)]).

Я также пытался проверить, используя na.rm=T в условной части, но R не распознал его, так как теперь NA находится в условной части. Например:

mean(df1$A[df1$C>0 & df1$C<2, na.rm=T])

Error in df1$A[df1$C > 0 & df1$C < 2, na.rm = T] :
  incorrect number of dimensions

Я считаю, что есть более разумный способ сделать это. Просьба любезно совет.

1 Ответ

11 голосов
/ 27 мая 2011

Причина, по которой вы получили ошибку с указанием неверного числа измерений, заключалась в том, что значение na.rm = TRUE было заключено в квадратные скобки. Таким образом, R интерпретировал это как 3-е измерение объекта, такого как датафрейм, матрица и т. Д. Если снаружи находится na.rm = TRUE, он работает нормально.

mean(df1$A[df1$C>0 & df1$C<2],na.rm=TRUE)

[1] 1.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...