Удалите переменные маркировки, присоединенные с foreign/Hmisc SPSS функции импорта

Как обычно, я получил некоторый файл SPSS, с которым я импортировал в R spss.get функция от Hmisc пакет. Я побеспокоен labelled класс это Hmisc::spss.get добавляет ко всем переменным в data.frame, следовательно хочу удалить его.

labelled класс дает мне головные боли, когда я пытаюсь работать ggplot или даже когда я хочу сделать некоторый черный анализ! Одно решение состояло бы в том, чтобы удалить labelled класс от каждой переменной в data.frame. Как я могу сделать это? Это возможно вообще? В противном случае, каковы мои другие опции?

Я действительно хочу обойти переменные переиздания "с нуля" с as.data.frame(lapply(x, as.numeric)) и as.character когда это применимо... И я, конечно, не хочу работать, SPSS и удалить маркировки вручную (не любите SPSS, ни хотите установить его)!

Спасибо!

8
задан aL3xa 7 March 2010 в 02:08
поделиться

2 ответа

Вы можете попробовать функцию read.spss из пакета foreign.

Грубый и готовый способ избавиться от класса labelled, созданного spss.get

for (i in 1:ncol(x)) {
    z<-class(x[[i]])
    if (z[[1]]=='labelled'){
       class(x[[i]])<-z[-1]
       attr(x[[i]],'label')<-NULL
    }
}

Но не могли бы вы привести пример, где labelled вызывает проблемы?

Если у меня есть переменная MAED в кадре данных x, созданная spss.get, у меня есть:

> class(x$MAED)
[1] "labelled" "factor"  
> is.factor(x$MAED)
[1] TRUE

Так что хорошо написанный код, который ожидает фактора (скажем), не должен иметь никаких проблем.

2
ответ дан 5 December 2019 в 10:02
поделиться

Ну, я понял, что функцию unclass можно использовать для удаления классов (кто бы сказал, ага?!):

library(Hmisc)
# let's presuppose that variable x is gathered through spss.get() function
# and that x is factor
> class(x)
[1] "labelled" "factor"
> foo <- unclass(x)
> class(foo)
[1] "integer"

Это не самое удачное решение, просто представьте себе набор векторов с обратным преобразованием ... Если кто-то превысит это, я проверю это как ответ ...

0
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: