当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R read.spss 读取 SPSS 数据文件


R语言 read.spss 位于 foreign 包(package)。

说明

read.spss 读取由 SPSS saveexport 命令存储的文件。

该文档最初编写于 2000 年,此后对 SPSS 格式更改的支持有限(数量不多)。

用法

read.spss(file, use.value.labels = TRUE, to.data.frame = FALSE,
          max.value.labels = Inf, trim.factor.names = FALSE,
          trim_values = TRUE, reencode = NA, use.missings = to.data.frame, 
          sub = ".", add.undeclared.levels = c("sort", "append", "no"),
          duplicated.value.labels = c("append", "condense"),
          duplicated.value.labels.infix = "_duplicated_", ...)

参数

file

字符串:要读取的文件名或URL。

use.value.labels

逻辑:将带有值标签的变量转换为R因子有那些水平?仅当标签数量至少与变量值一样多时才会执行此操作(当没有匹配标签的值返回为NA)。

to.data.frame

逻辑:返回数据帧?

max.value.labels

逻辑:如果 TRUE ,则只有具有值标签且最多这么多唯一值的变量才会转换为因子。

trim.factor.names

逻辑:从因子级别修剪尾随空格?

trim_values

逻辑:匹配 use.value.labels = TRUE 时,值和值标签是否应该忽略尾随空格?

reencode

逻辑:是否应该将字符串重新编码为当前语言环境。默认值 NA 表示仅在 UTF-8 或 latin-1 语言环境中执行此操作。或者指定文件采用的编码的字符串。

use.missings

逻辑:是否应该使用有关用户定义的缺失值的信息将相应的值设置为NA

sub

字符串:如果不是 NA,则 iconv 使用它来替换字符/因子输入中的任何不可转换字节。默认为 "." 。为了向后兼容 foreign 版本 <= 0.8-68,请使用 sub=NA

add.undeclared.levels

字符:指定如何处理至少具有一个值标签的变量以及没有值标签的其他非缺失值(如 R 中的因子水平)。对于 "sort"(默认),它将未声明的因子级别添加到已声明的级别(和标签),并根据级别对它们进行排序;对于 "append",它将未声明的因子级别附加到已声明的级别(和标签),而不进行排序;对于"no" 如果是数字 SPSS 级别(不是标签),则不会转换为因子,如果 SPSS 级别是字符和 to.data.frame=TRUE ,仍然会转换为因子。为了向后兼容 foreign 版本<= 0.8-68,请使用 add.undeclared.levels="no" (不推荐,因为这可能会将一些缺少相应值标签的值转换为 NA )。

duplicated.value.labels

字符:如何处理不同级别的重复值标签。对于 "append" (默认),保留第一个原始值标签,同时将进一步重复的标签重命名为 paste0(label, duplicated.value.labels.infix, level) ,对于 "condense" ,具有相同标签的所有级别都被压缩为 R 中这些级别中的第一个。未给出与 foreign 版本 <= 0.8-68 的兼容性,因为 R 版本 >= 3.4.0 不再支持重复的因子标签。

duplicated.value.labels.infix

字符:用于 SPSS 中具有重复值标签的因子水平标签的中缀(默认 "_duplicated_" )如果 duplicated.value.labels="append"

...

如果 to.data.frame = TRUE 则传递给 as.data.frame

细节

这使用 PSPP 项目中的修改代码(http://www.gnu.org/software/pspp/ 用于读取 SPSS 格式。

如果文件名看起来是一个 URL(方案‘⁠http:⁠', '⁠ftp:⁠' 或者 '⁠https:⁠’)URL 首先被下载到临时文件中,然后读取。 (‘⁠https:⁠' 在支持的地方得到支持download.file与当前的默认值method.)

有时,在 SPSS 中,值标签会添加到连续变量的某些值(例如,为了区分不同类型的缺失数据),并且您不希望这些变量转换为因子。通过设置max.value.labels,您可以指定具有大量不同值的变量即使具有值标签也不会转换为因子。

如果存在 SPSS 变量标签,它们将作为答案的 "variable.labels" 属性返回。

SPSS 在右侧填充固定长度字符串(包括值标签),因此可以通过这种方式读取R。默认参数trim_values=TRUE导致在匹配值标签时忽略尾随空格,例如字符串和值标签具有不同填充量的示例。请参阅示例sub了解删除字符数据中尾随空格的方法。

URL https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers 提供从 Windows 代码页编号到 iconv 可能知道的编码名称的转换列表,以及 reencode 的合适值。在 UTF-8 或 latin-1 语言环境中尝试自动重新编码 200 或更多的明显代码页:在大多数系统上可以重新编码其他一些 high-numbered 代码页,但编码名称取决于平台(请参阅 iconvlist )。

一个列表(或可选的 DataFrame ),其中保存的数据集中的每个变量都有一个组件。

如果 SPSS 文件中记录了看起来像 Windows 代码页的内容,则会将其作为属性 "codepage" 附加(作为数字)到结果中。

可能有属性 "label.table""variable.labels" 。属性 "label.table" 是值标签的命名列表,每个变量有一个元素,可以是 NULL 或命名字符向量。属性 "variable.labels" 是一个命名字符向量,其中名称为短变量名称,元素为长名称。

如果有用户定义的缺失值,就会有一个属性"Missings"。这是一个命名列表,每个变量有一个列表元素。每个元素都有一个元素type,一个长度为一的字符向量,给出缺失的类型,并且还可能有一个元素value与缺失对应的值。这是一个复杂的主题(其中R和 C 源代码read.spss是主要文档),但最简单的情况是类型"one","two""three"具有相应数量的(实数或字符串)值,其标签可以从"label.table"属性。其他可能性是有限范围或semi-infinite 范围,可能加上单个值。也可以看看http://www.gnu.org/software/pspp/manual/html_node/Missing-Observations.html#Missing-Observations.

注意

如果 SPSS 值标签转换为因子,则底层数字代码通常与 SPSS 数值不同,因为 R 中的数字代码始终为

您可能会看到有关 SPSS save 文件的文件编码的警告:此类文件可能包含需要重新编码的非 ASCII 字符数据。最常见的情况是 Windows 代码页 1252,它是 Latin-1 的超集。如果结果看起来像 Windows 代码页,则编码会(作为整数)记录在结果的属性 "codepage" 中。自动重新编码仅在 UTF-8 和 latin-1 语言环境中完成:请参阅参数 reencode

例子

(sav <- system.file("files", "electric.sav", package = "foreign"))
dat <- read.spss(file=sav) 
str(dat)   # list structure with attributes

dat <- read.spss(file=sav, to.data.frame=TRUE) 
str(dat)   # now a data.frame


### Now we use an example file that is not very well structured and 
### hence may need some special treatment with appropriate argument settings.
### Expect lots of warnings as value labels (corresponding to R factor labels) are uncomplete, 
### and an unsupported long string variable is present in the data
(sav <- system.file("files", "testdata.sav", package = "foreign"))

### Examples for add.undeclared.levels:
## add.undeclared.levels = "sort" (default):
x.sort <- read.spss(file=sav, to.data.frame = TRUE)
## add.undeclared.levels = "append":
x.append <- read.spss(file=sav, to.data.frame = TRUE, 
    add.undeclared.levels = "append")
## add.undeclared.levels = "no":
x.no <- read.spss(file=sav, to.data.frame = TRUE, 
    add.undeclared.levels = "no")

levels(x.sort$factor_n_undeclared)
levels(x.append$factor_n_undeclared)
str(x.no$factor_n_undeclared)


### Examples for duplicated.value.labels:
## duplicated.value.labels = "append" (default)
x.append <- read.spss(file=sav, to.data.frame=TRUE)
## duplicated.value.labels = "condense"
x.condense <- read.spss(file=sav, to.data.frame=TRUE, 
    duplicated.value.labels = "condense")

levels(x.append$factor_n_duplicated)
levels(x.condense$factor_n_duplicated)

as.numeric(x.append$factor_n_duplicated)
as.numeric(x.condense$factor_n_duplicated)

    
## Long Strings (>255 chars) are imported in consecutive separate variables 
## (see warning about subtype 14):
x <- read.spss(file=sav, to.data.frame=TRUE, stringsAsFactors=FALSE)

cat.long.string <- function(x, w=70) cat(paste(strwrap(x, width=w), "\n"))

## first part: x$string_500:
cat.long.string(x$string_500)
## second part: x$STRIN0:
cat.long.string(x$STRIN0)
## complete long string:
long.string <- apply(x[,c("string_500", "STRIN0")], 1, paste, collapse="")
cat.long.string(long.string)

作者

Saikat DebRoy and the R-core team

也可以看看

memisc 包中提供了同样基于 PSPP 代码库的不同接口:请参阅 spss.system.file 的帮助。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Read an SPSS Data File。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。