R read.xlsx colClasses 问题

R read.xlsx colClasses issue

我在 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

谁能指出我做错了什么?

这是一个老问题,但似乎从未得到完整解答。

这与 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所以可能无法同时读取两个因子和字符串。当然,在将列作为不同类型读取后,您始终可以将其转换为因子。