R read.xlsx colClasses 问题

Posted

技术标签:

【中文标题】R read.xlsx colClasses 问题【英文标题】:R read.xlsx colClasses issue 【发布时间】:2015-09-29 13:49:36 【问题描述】:

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

但是我得到以下错误:

class(aux) &lt;- colClasses[ic] 中的错误: 将factor 类添加到无效对象

谁能指出我做错了什么?

【问题讨论】:

我觉得更多的是colClasses = c("factor", "numeric") @Pascal docs 建议 colClasses 可以采用命名参数。 @RoryShaw 你检查过names(mydata) 以确保没有错误的空格吗?您也可以考虑使用其中一种,faster Excel 读取选项...我个人仅在文件中包含 Date 时才使用 read.xlsx @MichaelChirico 感谢您的帮助并链接到其他方法。 @Pascal 相当肯定 colClassess 可以采用命名参数 - 它适用于 read.csv 等 【参考方案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,因此可能无法同时读取因子和字符串。当然,您始终可以在将列作为不同类型读取后将其转换为因子。

【讨论】:

以上是关于R read.xlsx colClasses 问题的主要内容,如果未能解决你的问题,请参考以下文章

R语言读取excel文件实战(read.xlsx函数read_excel函数read.xlsx函数Write函数)

r语言 读取xlsx文件,时间变成了43435 怎么解决?

R中非常缓慢或失败的xls数据提取[功能read.xls,read_xls,xlsx2等]

R 使用 fread colClasses 或跳过参数来读取没有列标题的 csv

为啥自己的r语言中读不了xlsx文件

如何才能拿R读取Excel文件