使用包 memisc 解析 SPSS 文件时控制编码

Control encoding when parsing SPSS file using package memisc

我得到了一个 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.system.file() 在解析 SPSS 文件时使用此编码?

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

该输出清楚地表明函数没有考虑文件中的字符编码,或者编码声明不正确。那些 ? characters 表示被误解或错误书写的字符。我原以为它们是变音符号,但在代码页 1252 e4 实际上是变音符号。

Sav 文件有编码标记,所以应该尊重它。如果文件是由 SPSS 创建的,标记将是正确的,但是我们已经看到第三方代码编写的 sav 文件无法正确标记文件的情况。

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

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

谢谢大家的帮助。我将回答我自己的问题。 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

祝一切顺利。