R:条件达到NA时的意思

时间:2011-05-27 05:56:26

标签: r

感谢之前的帖子和专业回复。我几乎可以做我的分析,除了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: get average column A based on a range of values in column B)的帮助下,当D介于1和3之间时,我得到A的平均值,在这种情况下,使用此代码为2。

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

我的回答为4.5,如预期的那样(A列中4和5的平均值)。

但是,当我将列D替换为包含NA的列C时。我的回答只能是NA。而我期望通过忽略C列中的第3行(大于2)和第4行(带NA)来看到平均值为1和2的答案。

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 个答案:

答案 0 :(得分:11)

您收到错误表明维度数量不正确的原因是因为na.rm = TRUE位于方括号内。因此,R将此解释为对象的第三维,例如数据框,矩阵等。如果na.rm = TRUE放在外面,它可以正常工作。

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

[1] 1.5