感谢之前的帖子和专业回复。我几乎可以做我的分析,除了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
我相信有更明智的方法可以做到这一点。请善意的建议。
答案 0 :(得分:11)
您收到错误表明维度数量不正确的原因是因为na.rm = TRUE位于方括号内。因此,R将此解释为对象的第三维,例如数据框,矩阵等。如果na.rm = TRUE放在外面,它可以正常工作。
mean(df1$A[df1$C>0 & df1$C<2],na.rm=TRUE)
[1] 1.5