我正在准备一个带有调查数据的SPSS.sav数据文件,用于在R中进行分析。现在我有一个问题,一些二进制值为0/1(表示no/yes(的变量被意外地转换了。
我已使用memisc
包将数据导入为data.set对象。
Dset.core <- spss.system.file(file="C://..../data_coded.sav",
varlab.file=NULL,
codes.file=NULL,
missval.file=NULL,
count.cases=TRUE,
to.lower=FALSE
)
从我从str()
和codebook()
输出中看到的情况来看,这一切都很好。0/1变量$AMEVYES(标签为0=否,1=是(的一个示例如下:
str(Dset.core)
具有1999 obs.的106个变量的数据集:
(…(
$AMEVYES:Nmnl。项目w/2个标签,用于0,1数量0,0 0 0 0,0,0 1。。。
我现在想将memisc
创建的特殊data.set对象转换为具有以下属性的数据帧:
Dset2Df.core <- as.data.frame(Dset.core)
按照预期,将标称0/1变量更改为具有相应水平的因子变量。但出于某种奇怪的原因,此过程还将变量的值从0/1更改为1/2,如本例输出:
str(Dset2Df.core)
"数据帧":1999 obs.of 106 variables:
(…($AMEVYES:因子w/2级"否"、"是":1 1 1 1 11 1 1 1 2。。。
为什么会发生这种情况,最重要的是,我如何才能阻止这种情况的发生?非常感谢你的提示!
附言:我是R的新手,也是这个论坛的新手,所以如果我在提出问题时错过了任何最佳实践,请原谅。
正如木匠们所说:
因子存储为整数,并具有与这些整数相关联的标签唯一整数。而因素看起来(通常表现(像性格向量,它们实际上是引擎盖下的整数,你需要把它们当作绳子对待时要小心。
因子内部存储为从1开始的整数您不能更改这些内部存储的值。但是,您可以更改它们的标签("Yes", "No")
或(0, 1)
。