Сохранять метки значений 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")
Другие вопросы по тегам