排除子集中特定列中包含NA的行

时间:2016-06-16 01:28:33

标签: r dataframe subset

我正在尝试排除包含我选择的特定列的NA的子集的行。我有一个这种组织的调查数据的CSV电子表格,例如:

name    idnum   term    type      q2    q3
bob     0321    1       2         0     .
.       .       3       1         5     3
ron     .       2       4         2     1
.       2561    4       3         4     2

当我创建我的R工作区时,我将其设置为data <- read.csv(..., na.strings='.')。为了我的分析,我然后按术语和类型创建子集,例如set13 <- subset(data, term=1 & type=2)。当我尝试进行t检验时,我注意到该函数抛出了NA的任何实例,有效地将我的样本大小减半。

对于我的分析,我想排除缺少调查项目的响应,例如我的示例中的Bob,缺少问题3.但我仍然希望在name中包含具有一个或多个NA的行或idnum列。所以,实质上,我想通过省略NAs的列来选择。 (请记住,这只是一个示例 - 我的实际CSV有大约1000行,因此每个子集可能包含100-150行。)

我知道这可以使用数据框完成,但我不确定如何将其合并到我给定的子集格式中。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

查看this SO帖子的答案中显示的complete.cases

data[complete.cases(data[,3:6]),]

这将返回第3列到第6列中包含完整信息的所有行。

答案 1 :(得分:3)

另一种方法。

data[rowSums(is.na(data[,3:6]))==0,]

答案 2 :(得分:2)

另一种选择是

data[!Reduce(`|`, lapply(data[3:6], is.na)),]