使用包 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
祝一切顺利。
我得到了一个 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
祝一切顺利。