在 R 数据表中,max 适用于有序因子,分组时失败



函数max()在有序因子类型的列上正常运行。但是,当列与by=分组时,相同的操作将失败。

假设我有一个数据表,如下所示:

DT <- data.table(ID=rep(1:3, 3), State=sample(LETTERS[1:3], 9, replace=TRUE))

将列State转换为有序因子,如下所示:

DT[, State := factor(State, levels=LETTERS[1:3], ordered = TRUE)]

这有效:

DT[, max(State)]

此操作失败并显示错误:

DT[, max(State), by="ID"]

错误是:gmax(状态(中的错误:max对因子没有意义。

怎么来了?

这是一个已在当前开发版本的data.table中修复的错误。

您可以通过以下方式安装开发版本:

install.packages('data.table', type = 'source',
repos = 'http://Rdatatable.github.io/data.table')

如果此操作失败,请在安装 wiki 上查看完整详细信息。

library(data.table)
# data.table 1.11.5 IN DEVELOPMENT built 2018-08-13 20:20:11 UTC; travis  Latest news: r-datatable.com
DT[ , max(State), by="ID"]
#    ID V1
# 1:  1  C
# 2:  2  C
# 3:  3  B

对于在受控/生产环境中无法更新的用户,您仍然可以通过运行以下命令来回避问题:

dt_optim = options(datatable.optimize = 0) 
DT[ , max(State), by="ID"]
# resetting afterwards to keep your code running as fast as possible
options(datatable.optimize = dt_optim)

该错误来自data.table内部优化的分组框架GForce;上述解决方法阻止此代码执行并默认为base::max

最新更新