我已经使用该包haven
将 SPSS 数据读入 R。一切似乎都很好,除了当我尝试对数据进行子集化时,它的行为似乎不正确。这是代码(我没有 SPSS 来创建示例数据并且不能发布真实的东西):
require(haven)
df <- read_spss("filename1.sav")
tmp <- df[as_factor(df$variable1) == "factor1",]
tmp <- tmp[!is.na(tmp$variable2), ]
上面的df有“NA”分散在各处。我希望上面只对数据进行子集化,只保留带有“factor1”的变量 1 的行,并丢弃变量 2 中所有带有 NA 的行。第一个子集按预期工作。但第二个子集没有。它删除了行,但 NA 仍然存在。
我怀疑这个问题与haven
构建导入数据和使用类labelled
而不是实际因子变量的方式有关,但它在我的脑海中。任何人都知道会发生什么以及如何完成同样的事情?
这是df
,variable1
和的结构variable2
:
> str(df)
'data.frame': 4573 obs. of 316 variables:
> str(df$variable1)
Class 'labelled' atomic [1:4573] 9 9 9 14 8 8 2 4 8 16 ...
..- attr(*, "labels")= Named num [1:18] 1 2 3 4 5 6 7 8 9 10 ...
.. ..- attr(*, "names")= chr [1:18] "factor1" "factor2" "factor3" "factor4" ...
> str(df$variable2)
Class 'labelled' atomic [1:4573] 3 NA 3 NA 3 NA 1 1 NA NA ...
..- attr(*, "labels")= Named num [1:3] 1 2 3
.. ..- attr(*, "names")= chr [1:3] "Sponsor" "Not a Sponsor" "Don't Know"