首页 > 解决方案 > 在 data.table 中的列上,以单个“data.table”方式记录来自函数的“by = ...”-分层和非分层输出

问题描述

我正在为 data.table 的列记录 R quintile() 函数的输出,按“by = ...”分层:

require(data.table)

DT <- data.table(iris)
tab_strata <- DT[,as.list(quantile(Sepal.Length)), by = Species]

      Species  0%   25% 50% 75% 100%
1:     setosa 4.3 4.800 5.0 5.2  5.8
2: versicolor 4.9 5.600 5.9 6.3  7.0
3:  virginica 4.9 6.225 6.5 6.9  7.9

我还想在没有“by = ...”的情况下获得相同的输出,即在整个列上计算,并将其连接到初始输出,所以我有一个如下的最终表:

tab_all <- DT[,as.list(quantile(Sepal.Length))]
tab_all <- cbind("Species" = "all", tab_all)
tab_result <- rbind(tab_all, tab_strata)

      Species  0%   25% 50% 75% 100%
1:        all 4.3 5.100 5.8 6.4  7.9
2:     setosa 4.3 4.800 5.0 5.2  5.8
3: versicolor 4.9 5.600 5.9 6.3  7.0
4:  virginica 4.9 6.225 6.5 6.9  7.9

我的问题:是否有可能以单一的“data.table”方式获得带有“all”和“by = ...”结果的tab_result?

标签: rdata.table

解决方案


工具箱中鲜为人知的角落是data.table函数cube()和。我不是他们使用方面的专家,但他们似乎能够一步完成您正在寻找的东西:rollup()groupingsets()

cube(DT, j = as.list(quantile(Sepal.Length)), by = "Species")

      Species  0%   25% 50% 75% 100%
1:     setosa 4.3 4.800 5.0 5.2  5.8
2: versicolor 4.9 5.600 5.9 6.3  7.0
3:  virginica 4.9 6.225 6.5 6.9  7.9
4:       <NA> 4.3 5.100 5.8 6.4  7.9

推荐阅读