2

我在使用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 ...

我想导入Treatmentfactor. 为此,我尝试将该colClasses函数用作参数,如下所示:

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

但是我收到以下错误:

错误class(aux) <- colClasses[ic]:将类添加factor到无效对象

谁能指出我做错了什么?

4

1 回答 1

2

这是一个古老的问题,但似乎从未完全回答过。

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

于 2017-09-19T01:09:26.557 回答