Как обычно, я получил некоторый файл 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, ни хотите установить его)!
Спасибо!
Вы можете попробовать функцию 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
Так что хорошо написанный код, который ожидает фактора (скажем), не должен иметь никаких проблем.
Ну, я понял, что функцию 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"
Это не самое удачное решение, просто представьте себе набор векторов с обратным преобразованием ... Если кто-то превысит это, я проверю это как ответ ...