R避难所:读取spss文件时缺少标签和标签名称

时间:2016-10-07 08:37:13

标签: r import spss r-haven

我使用R的避免包来读取user_na=TRUE的spss文件。该文件有许多带有值标签的字符串变量。在R中,只有第一个字符串变量(SizeofH1)具有作为属性分配给它的正确值标签。 不幸的是,我甚至无法提供这些数据的片段以使其完全可重现,但这里是我在PSPP中可以看到的截图

PSPP Data editor

和R中的str()返回...

 $ SizeofH1:Class 'labelled'  atomic [1:280109] 3 3 3 3 ...
 ..- attr(*, "label")= chr "Size of Household ab 2002"
 ..- attr(*, "format.spss")= chr "A30"
 ..- attr(*, "labels")= Named chr [1:9] "1" "2" "3" "4" ...
 ..- attr(*, "names")= chr [1:9] "4 Persons" "2 Persons" "1 Person 50 years plus" "3 Persons" ...
 $ PROMOTIO: atomic  40 1 40 40 ...
 ..- attr(*, "label")= chr "PROMOTION"
 ..- attr(*, "format.spss")= chr "A30"
 $ inFMCGfr: atomic  1 1 1 1 ...
 ..- attr(*, "label")= chr "in FMCG from2011"
 ..- attr(*, "format.spss")= chr "A30"
 $ TRADESEG: atomic  1 1 1 1 ...
 ..- attr(*, "label")= chr "TRADE SEGMENT"
 ..- attr(*, "format.spss")= chr "A30"
 $ ORGANISA: atomic  111 111 111 111 ...
 ..- attr(*, "label")= chr "ORGANISATION"
 ..- attr(*, "format.spss")= chr "A30"
 $ NAME    : atomic  9 9 9 9 ...
 ..- attr(*, "label")= chr "NAME"
 ..- attr(*, "format.spss")= chr "A30"

我希望有人可以指出导致此行为的任何可能原因。

2 个答案:

答案 0 :(得分:2)

“语义”小插图有关于此主题的一些有用信息。

library(haven)
vignette('semantics')

获取价值标签有两种选择。我认为下面的示例是一个很好的示例,使用map包中的purrr函数(但也可以使用lapply代替)

# Get data from spss file
df <- read_sav(path_to_file)

# get value labels
df <- map_df(.x = df, .f = function(x) {
  if (class(x) == 'labelled') as_factor(x)
  else x})
# get column names
colnames(df) <- map(.x = spss_file, .f = function(x) {attr(x, 'label')})

答案 1 :(得分:1)

最好是将你的spss文件保存为CSV,然后在R中读取它。我之前已经遇到过这种情况并且有些字符串没有正确读取 - 通常SPSS在字符串方面不是很聪明这可能导致问题的变量。