R read.xlsx colClasses проблема

У меня проблема с использованием colClasses функция в read.xlsx

У меня есть следующее data.frame

mydata <- read.xlsx("dataset_1.xlsx", sheetName = "dataset_1")
head(mydata)
Treatment Nitrate_conc
1         1           12
2         1           12
3         1           15
4         1           16
5         1           12
6         2           18
str(mydata)
data.frame':    20 obs. of  2 variables:
$ Treatment   : num  1 1 1 1 1 2 2 2 2 2 ...
$ Nitrate_conc: num  12 12 15 16 12 18 25 26 28 28 ...

Я хочу импортировать Treatment как factor, чтобы сделать это, я попытался использовать colClasses функция в качестве аргумента, как показано ниже:

mydata1 <- read.xlsx("dataset_1.xlsx", sheetName = "dataset_1", colClasses = c("Treatment" = "factor", "Nitrate_conc" = "numeric"))

Однако я получаю следующую ошибку:

Ошибка в class(aux) <- colClasses[ic]: добавление класса factor к недействительному объекту

Кто-нибудь может указать, что я делаю не так?

1 ответ

Решение

Это старый вопрос, но, похоже, на него так и не ответили полностью.

Это не имеет ничего общего с тем, являются ли элементы списка для colClasses назван. Проблема может быть прослежена через документацию ?read.xlsx, При описании colClasses параметр, документация указывает на документацию для readColumns, В описании там сказано

Принимаются только числовые, символьные, дата, POSIXct, типы столбцов. Все остальное будет привязано к типу персонажа.

Так что уточнение 'factor' не допускается Также обратите внимание, что под ... это говорит

другие аргументы для data.frame, например stringsAsFactors

Итак, мы можем использовать

mydata <- read.xlsx("dataset_1.xlsx", sheetName = "dataset_1", 
  colClasses=c("character", "numeric"))
str(mydata)
'data.frame':   6 obs. of  2 variables:
 $ Treatment   : Factor w/ 2 levels "1","2": 1 1 1 1 1 2
 $ Nitrate_conc: num  12 12 15 16 12 18

Вы также можете использовать:

mydata <- read.xlsx("dataset_1.xlsx", sheetName = "dataset_1", 
    colClasses=c(Treatment = "character", Nitrate_conc = "numeric"))

Похоже, есть только один параметр stringsAsFactors поэтому может быть невозможно прочитать оба фактора и строки одновременно. Конечно, вы всегда можете преобразовать столбец в фактор после прочтения его как другого типа.

Другие вопросы по тегам