R read.xlsx colClasses问题

时间:2015-09-29 13:49:36

标签: r import-from-excel r-xlsx

我在使用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 个答案:

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