У меня есть странная проблема при использовании dplyr на data.frame для вычисления количества отсутствующих наблюдений для каждой группы символьной переменной. Это создает «Ошибка: колонка„“имеет неподдерживаемый типDplyr - Error: column '' имеет неподдерживаемый тип
Чтобы воспроизвести его я создал подмножество Файл подмножество RDATA доступна здесь:.. rdata file including dftest data.frame Во-первых, используя подмножество I предоставили код.:
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
создаст ошибку: Ошибка: колонка 'файл' имеет неподдерживаемый тип
НТР (dftest) возвращает:
'data.frame': 756345 obs. of 2 variables:
$ file: atomic bjir31fl.dta bjir31fl.dta bjir31fl.dta bjir31fl.dta ...
..- attr(*, "levels")= chr
$ v131: Factor w/ 330 levels "not of benin",..: 6 6 6 6 1 1 1 9 9 9 ...
Однако, взяв подмножество подмножества и снова запустив команду dplyr, создаст ожидаемый результат.
dftest <- dftest[1:756345,]
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
ул (dftest) теперь возвращает:
'data.frame': 756345 obs. of 2 variables:
$ file: chr "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" ...
$ v131: Factor w/ 330 levels "not of benin",..: 6 6 6 6 1 1 1 9 9 9 ...
Кто-нибудь есть какие-либо предложения о том, что могло бы вызвать эту ошибку, и что с этим делать. В моем исходном файле у меня 300 переменных, а dplyr утверждает, что большинство из них имеют неподдерживаемый тип.
Спасибо.
Как вы создали 'dftest'? Я никогда не видел data.frame со столбцом, который указан как «атомный». Кажется, это плохо сформированный data.frame. – MrFlick
Да @MrFlick, что-то не так. Dftest происходит из data.frame с именем df, что является результатом добавления большого количества файлов STATA. Однако, поскольку некоторые метки факторов имеют длину строки 0, я изменяю это на длину строки 1. По-видимому, этот код создает проблему: 'for (x in (names (df))) { print (x) dflevels <- levels (df [[x]]) print (dflevels [dflevels == ""]) levels (df [[x]]) [levels (df [[x]]) == ""] <- "" df [[x]] [df [[x]] == ""] <- "" df [[x]] <- df [[x]] [, drop = TRUE] } ' – spesseh
Этот код не имеет никакого смысла. Вы просто пытаетесь заменить метки нулевой длины на одно пространство? Как насчет только уровней 'for (x in names (df)) (df [[x]]) <- gsub ("^$ "," ", levels (df [[x]]))' – MrFlick