2014-01-20 2 views
2

У меня есть файл SPSS, но не SPSS. Поэтому я хочу, чтобы открыть его в R.Что такое attr (*, "value.labels") при чтении SPSS в R?

Если открыть его с помощью:

library(foreign) 
dat <- read.spss("file.sav", to.data.frame=TRUE) 

Я получаю предупреждение

re-encoding from CP1252 
Warning message: 
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : 
    duplicated levels in factors are deprecated 

Если я правильно понимаю, то уведомление кодирования не проблема (Я в локали UTF-8), но что означает предупреждение об уровнях?

Если открыть файл с помощью:

dat <- read.spss("file.sav", to.data.frame=TRUE, use.value.labels = FALSE) 

предупреждение исчезает, но я не уверен, что я делаю правильно.

Кроме того, вызов str(dat) дает мне выход, как:

pt_art : atomic 1 1 1 1 1 1 1 1 1 1 ... 
    ..- attr(*, "value.labels")= Named chr "2" "1" 
    .. ..- attr(*, "names")= chr "IPT" "VT" 

Что attr(*, "value.labels") значит? Я знаю, что «pt_art» означает «тип психотерапии» и «IPT» и «VT» - это два типа терапии, а «2» и «1» - это числовые коды, представляющие эти типы, поэтому у нас есть уровни и метки в R, но как правильно передать это в R?

ответ

2

Предупреждение возникает, когда вы пытаетесь определить фактор с аргументом labels, который содержит повторяющиеся значения.

(x <- sample(letters[1:4], 10, replace = TRUE)) 
## [1] "b" "c" "d" "d" "b" "c" "d" "c" "c" "c" 
factor(x, levels = x) 
## [1] b c d d b c d c c c 
## Levels: b c d d b c d c c c 
## Warning message: 
## In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, : 
## duplicated levels will not be allowed in factors anymore 

SPSS обычно использует метки значений для обозначения категориальных переменных (которые должны стать факторами в R). Однако обратите внимание на этот раздел на странице справки ?read.spss.

Иногда в SPSS, значение метки будут добавлены к некоторым значениям непрерывной переменной (например, чтобы различать разные типы недостающих данных), и вы не хотите, чтобы эти переменные преобразуются в факторов. Установив «max.value.labels», вы можете указать, что переменные с большим количеством различных значений не преобразуются в факторы, даже если они имеют метки значений. Кроме того, переменные не будут преобразованы в коэффициенты, если отсутствуют недопустимые значения , которые не имеют метки значений. Затем метки значений возвращаются в атрибут «value.labels» этой переменной.

Смежные вопросы