當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。