我已经使用包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”的variable1行,并丢弃变量2中带有NA的所有行。第一个子集按预期工作。但第二个子集没有。它会删除行,但NAs仍然存在。
我怀疑这个问题与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"