【问题标题】:Control encoding when parsing SPSS file using package memisc使用包 memisc 解析 SPSS 文件时控制编码
【发布时间】:2015-08-24 05:39:48
【问题描述】:

我得到了一个 SPSS 系统文件,我想使用 R 进行分析。我正在使用以下魔法将文件解析为 R。

library(memisc)
foo <- spss.system.file("foobar.sav")
bar <- subset(foo, select=c(var1,var2,var3))

查看解析后的数据时,您会得到以下信息:

> bar
Data set with 379 observations and 3 variables

var1       var2        var3
1      gut    weiblich      Herbst
2      gut mnlich      Sommer
3      gut mnlich      Sommer
4      gut mnlich      Winter
5      gut mnlich Fr�hling
6      gut mnlich Fr�hling
7      gut    weiblich Fr�hling
.
.
.
25      gut    weiblich Fr�hling
.. ........ ........... ...........
(27 of 379 observations shown)

我想你明白了。我相对确定 .sav 文件已使用 latin1 编码保存。解析 SPSS 文件时如何告诉spss.system.file() 使用此编码?

【问题讨论】:

    标签: r encoding utf-8 spss latin1


    【解决方案1】:

    感谢大家的帮助。我将回答我自己的问题。 spss.system.file() 按原样读取包含在 SPSS 文件中的字符串,无需任何翻译。因此,生成的字符串不包含任何编码信息。 memisc 包包含一个函数 Iconv,不过,它的作用与 Unix 函数 iconv 完全一样。

    > library(memisc)
    > foo <- spss.system.file("foobar.sav")
    > foo <- Iconv(foo,from="Latin1",to="UTF-8")
    > foo <- as.data.frame(as.data.set(foo))
    > head(foo$Geschlecht)
    [1] weiblich männlich männlich männlich männlich männlich
    Levels: männlich weiblich
    

    一切顺利。

    【讨论】:

      【解决方案2】:

      该输出清楚地表明该函数未考虑文件中的字符编码,或者该编码未正确声明。那些 ?字符表示误解或错误书写的字符。我希望它们是 u-umlaut,但在代码页 1252 中,e4 实际上是 a-umlaut。

      Sav 文件的编码已标记,因此应予以尊重。如果文件是由 SPSS 创建的,则标记将是正确的,但是我们看到了第三方代码编写的 sav 文件没有正确标记文件的情况。

      我很确定这个文件实际上是用代码页 1252 编写的,但编码可能被错误地声明为 utf-8,假设上面的显示实际上可以正确地表示扩展字符。

      SPSS SYSFILE INFO 命令将显示声明的编码(如果有),但您也可以查看文件第一部分的十六进制转储并查看它。

      【讨论】:

        【解决方案3】:

        此问题可能特定于 memisc 包。如果您不想坚持使用 memisc,请尝试使用 foreign 包的 read.spss 函数作为快速解决方案。还可以考虑在您的问题中添加memisc 标签。

        【讨论】:

        • 我确实怀疑这确实是 memisc 包的问题,​​因为我已要求将 sav 文件保存在 utf-8 中。解析结果现在是:m\xe4nnlich 而不是 mnlich。 read.spss 函数似乎已经过时并且确实——不幸的是——不起作用,这就是我使用memisc 的原因。添加标签 memics 不起作用,因为它需要 5000 票才能使其成为标签。
        猜你喜欢
        • 2016-05-06
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        • 2017-03-13
        • 1970-01-01
        相关资源
        最近更新 更多