我使用R的避免包来读取user_na=TRUE
的spss文件。该文件有许多带有值标签的字符串变量。在R中,只有第一个字符串变量(SizeofH1
)具有作为属性分配给它的正确值标签。
不幸的是,我甚至无法提供这些数据的片段以使其完全可重现,但这里是我在PSPP中可以看到的截图
和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"
我希望有人可以指出导致此行为的任何可能原因。
答案 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在字符串方面不是很聪明这可能导致问题的变量。