我正在尝试排除子集的行,该子集包含我选择的特定列的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 Workspace时,我将其设置为data <- read.csv(..., na.strings='.')
。为了进行分析,我然后按学期和类型创建子集,例如set13 <- subset(data, term=1 & type=2)
。当我试图进行t检验时,我注意到该功能抛出了任何NA的实例,有效地将样本量切成两半。
对于我的分析,我想排除缺少调查项目的响应,例如我的示例中的Bob,缺少问题3。但是我仍然想在name
或idnum
列中包括一个或多个NAS的行。因此,从本质上讲,我想通过省略NAS的列进行选择。(请记住,这只是一个例子 - 我的实际CSV有大约1000行,因此每个子集可能包含100-150行。)
我知道可以使用数据框架完成,但是我不确定如何将其纳入给定的子集格式。有办法做到吗?
请查看 complete.cases
,如该答案所示。
data[complete.cases(data[,3:6]),]
这将返回所有行,并在第3至6列中提供完整的信息。
另一种方法。
data[rowSums(is.na(data[,3:6]))==0,]
另一个选项是
data[!Reduce(`|`, lapply(data[3:6], is.na)),]