【发布时间】:2018-05-24 15:55:09
【问题描述】:
我真的很欣赏 data.table 包的速度,但我一直无法弄清楚如何为汇总函数添加后缀。 dplyr 包开箱即用地做到了这一点,我希望它可以在 data.table 中实现。这是一个可重现的示例。
library(data.table)
library(datasets)
library(dplyr)
data(iris)
iris_dt = as.data.table(iris)
#Using dplyr
summary_stats <- iris %>%
group_by(Species) %>%
summarise_all(funs(mean(., na.rm = TRUE),sd(.,na.rm=TRUE)))
#Using data table
cols = sapply(iris_dt, is.numeric)
iris_dt[, lapply(.SD, mean), .SDcols = cols]
names(summary_stats)
[1] "Species" "Sepal.Length_mean" "Sepal.Width_mean" "Petal.Length_mean" "Petal.Width_mean" "Sepal.Length_sd"
[7] "Sepal.Width_sd" "Petal.Length_sd" "Petal.Width_sd"
names(iris_dt)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
如您所见,使用 dplyr 和多个汇总函数,它会自动添加一个后缀。这对我来说非常有用,但在较大的数据集上速度很慢。
我们可以对 data.table 做同样的事情吗?通过不同的汇总函数汇总所有数字列并在输出中添加正确的后缀?
【问题讨论】:
-
对于前缀,您可以像在base R中一样使用
iris_dt[, c(m = lapply(.SD, mean)), .SDcols = cols],对于后缀,data.frame(c(x = iris)),我猜您需要使用setnames,也许围绕操作编写一个辅助函数。 (使用 setnames 而不是 setNames,因为前者通过引用修改名称)
标签: r dplyr data.table