2015-09-29 4 views
1

Я имею проблему с помощью функции colClasses в read.xlsxR read.xlsx colClasses вопрос

У меня есть следующие 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")) 

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

Error in class(aux) <- colClasses[ic] : adding class factor to an invalid object

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

+0

Я думаю, что это больше 'colClasses = c (" factor "," numeric ")'. –

+0

@Pascal [docs] (http://www.inside-r.org/packages/cran/xlsx/docs/read.xlsx) предлагает, что 'colClasses' может принимать именованный аргумент. – MichaelChirico

+0

@RoryShaw вы проверили 'names (mydata)', чтобы быть уверенным, что, возможно, не странное пространство? Вы также можете рассмотреть возможность использования одного из других, [быстрее] (http://stackoverflow.com/questions/6099243/read-an-excel-file-directly-from-ar-script/31734198#31734198) параметров чтения Excel. .. Я лично использую 'read.xlsx', когда в файле есть' Date'. – MichaelChirico

ответ

2

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

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

Only numeric, character, Date, POSIXct, column types are accepted. Anything else will be coverted to a character type.

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

other arguments to data.frame, for example 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 поэтому может невозможно одновременно считывать оба фактора и строки. Конечно, вы всегда можете преобразовать столбец в коэффициент, прочитав его как другой тип.

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