【问题标题】:R 'memisc' package: why has "as.data.frame()" changed 0/1 values of data.set to 1/2 in data.frame?R'memisc'包:为什么“as.data.frame()”将data.set的0/1值更改为data.frame中的1/2?
【发布时间】:2018-12-15 10:18:46
【问题描述】:

我正在尝试准备一个包含调查数据的 SPSS .sav 数据文件,以便在 R 中执行分析。 现在我有一个问题,一些二进制值为 0/1(表示否/是)的变量已意外转换。

我已使用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。带有 0,1 个标签的项目 0 0 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) 

'data.frame': 1999 obs。 106 个变量:

(...) $ AMEVYES : 因子 w/ 2 个级别 "否","是": 1 1 1 1 1 1 1 1 1 2 ...

为什么会发生这种情况,最重要的是,我怎样才能阻止这种情况发生? 非常感谢您的提示!

PS:我对 R 和这个论坛比较陌生,所以如果我在提出问题时错过了任何最佳实践,请原谅。

【问题讨论】:

  • 在寻找其他东西时偶然发现了这个问题。关于你的问题;我们缺少practical reproducible example。为什么不显示 5 行,而不是 106 个变量的所有 1999 行? head(Dset2Df.core$AMEVYES, 5)。另外,想要的输出不清楚,要不要保留"Yes", "No" AND 0,1

标签: r dataframe spss


【解决方案1】:

正如The Carpentries 所说:

因子存储为整数,并具有与这些相关的标签 唯一整数。虽然因素看起来(并且经常表现)像性格 向量,它们实际上是引擎盖下的整数,你需要 像字符串一样对待它们时要小心。

因子在内部存储为从 1 开始的整数。您无法更改这些内部存储的值。但是,您可以更改他们的标签 ("Yes", "No")(0, 1)

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2013-08-17
    • 2022-08-18
    相关资源
    最近更新 更多