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

时间:2015-06-09 12:00:40

标签: r encoding utf-8 spss latin1

我已经获得了一个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-encoding保存。在解析SPSS文件时如何告诉spss.system.file()使用此编码?

3 个答案:

答案 0 :(得分: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

一切顺利。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

该输出清楚地表明该函数未考虑文件中的字符编码或未正确声明编码。那些?字符表示拼写错误或写错了字符。我希望它们是u-umlauts,但在代码页1252中e4实际上是一个变音符号。

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

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

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