如何删除列中的NA个案并同时计算因子的平均值?
使用此代码,我在x数据帧
内计算Group_A中DC1的平均值 test.mean <- mean(x$DC1[x$Groups=="Group_A"])
但是,Group_A因子中的DC1列的某些值确实具有NA单元格。为了从DC1中删除NA个案,我运行此代码,其中DC1列是第3个。
test.filterNA <- x[complete.cases(x[ , 3]), ]
如何在一个简单的行中合并两个代码?
答案 0 :(得分:2)
有几种方法可以解决这种情况。在这里,列&#39;组&#39;有一些缺失值。使用==
运算符,NA值将返回为NA
c(1:3, NA) == 2
#[1] FALSE TRUE FALSE NA
当我们根据上面的逻辑索引对另一列进行子集时,NA值将返回为NA
如果要应用的功能具有缺失值删除选项,则可以使用它。在mean
的情况下,na.rm
默认为FALSE。将其更改为TRUE,它应该工作
mean(x$DC1[x$Groups == "Group_A"], na.rm = TRUE)
另一种选择是使NA值返回为FALSE。这可以通过另一个逻辑条件& !is.na
mean(x$DC1[x$Groups=="Group_A" & !is.na(x$Groups)])
如果&#39; DC1&#39;中没有NA值,它应该可以正常工作。为安全起见,最好同时添加na.rm = TRUE
第三个选项是使用%in%
,它总是返回TRUE / FALSE
mean(x$DC1[x$Groups %in% "Group_A"])
答案 1 :(得分:1)
@akrun的两个选项:
mean(x$DC1[x$Groups == "Group_A"], na.rm = TRUE)
或
mean(x$DC1[x$Groups=="Group_A" & !is.na(x$Groups)])