Сохранять метки значений SPSS при работе с данными
Я анализирую данные студенческого уровня из PISA 2015. Данные доступны в формате SPSS здесь
Я могу загрузить данные в R, используя функцию read_sav в пакете убежища. Мне нужно иметь возможность редактировать данные в R, а затем сохранять / экспортировать данные в формате SPSS с метками исходного значения, которые включены в загрузку SPSS без изменений. Код, который я использовал:
library(haven)
student<-read_sav("CY6_MS_CMB_STU_QQQ.sav",user_na = T)
student2<-data.frame(student)
#some edits to data
write_sav(student2,"testdata1.sav")
Когда мой коллега (который работает в SPSS) пытается открыть "testdata1.sav", метки значений отсутствуют. Я прочитал документацию убежища и не могу найти решение для этого. Я также пробовал read/write.spss в стороннем пакете, но у меня возникают проблемы с загрузкой в наборе данных.
Я использую R версии 3.4.0 и последнюю версию убежища.
Кто-нибудь знает, есть ли решение для этого? Я был бы очень благодарен за вашу помощь. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, чтобы ответить на этот вопрос.
3 ответа
library(foreign)
df <- read.spss("spss_file.sav", to.data.frame = TRUE)
Это может быть не совсем то, что вы ищете, потому что он использует метки в качестве данных. Таким образом, если у вас есть файл SPSS с 0 для "мужчины" и 1 для "женщины", вы будете иметь df со значениями, которые являются все мужчины и женщины. Это продвинет вас на шаг вперед, но, возможно, это еще не все решение. Я работаю над той же проблемой и сообщу, что еще я найду.
library ("sjlabelled")
student <- sjlabelled::read_spss("CY6_MS_CMB_STU_QQQ.sav")
student2 <-student
write_spss(student2,"testdata1.sav")
Я не пробовал и надеюсь, что это сработает. Пакет sjlabelled хорош с символами, отличными от ascii, как немецкий Umlaute.
Но имейте в виду, что R сохраняет метки как атрибуты. Эти атрибуты теряются при выполнении некоторых преобразований данных (например, в качестве подмножества данных). Когда они потеряны в R, они, конечно же, не появятся в SPSS. Функция sjlabelled::copy_labels полезна в таких случаях:
student2 <- copy_labels(student2, student) #after data transformations and before export to spss
Я думаю, вам нужно восстановить метки значений в фрейме данных после импорта набора данных в R. Затем запишите этот фрейм данных в файл sav.
#load library
libray(haven)
# load dataset
student<-read_sav("CY6_MS_CMB_STU_QQQ.sav",user_na = T)
#map to find class of each columns
map_dataset<-map(student, function(x)attr(x, "class"))
#Run for loop to identify all Factors with haven-labelled
factor_variable<-c()
for(i in 1:length(map_dataset)){
if(map_dataset[i]!="NULL"){
name<-names(map_dataset[i])
factor_variable<-c(factor_variable,name)
}
}
#convert all haven labelled variables into factor
student2<-student %>%
mutate_at(vars(factor_variable), as_factor)
#write dataset
write_sav(student2, "testdata1.sav")