我在使用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
添加到无效对象
有谁可以指出我做错了什么?
答案 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
,因此可能无法同时读取因子和字符串。当然,在将列作为不同类型读取后,您始终可以将列转换为因子。