R data.table итоговая функция суффикс или префикс - PullRequest
0 голосов
/ 24 мая 2018

Я действительно ценю скорость пакета 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?Суммируйте все числовые столбцы с помощью различных функций суммирования и добавьте правильный суффикс к выводу?

1 Ответ

0 голосов
/ 24 мая 2018

Расширяя комментарий Фрэнка, если можно использовать префиксы имен столбцов вместо суффиксов, вы можете сделать:

my_funs <- c(mean = function(x) mean(x, na.rm = TRUE),
             sd = function(x) sd(x, na.rm = TRUE))

iris_dt[
  ,
  do.call(c, lapply(my_funs, function(fun) lapply(.SD, fun))),
  by = Species,
  .SDcols = cols # superfluous here
  ]

#       Species mean.Sepal.Length mean.Sepal.Width mean.Petal.Length mean.Petal.Width
# 1:     setosa             5.006            3.428             1.462            0.246
# 2: versicolor             5.936            2.770             4.260            1.326
# 3:  virginica             6.588            2.974             5.552            2.026
#    sd.Sepal.Length sd.Sepal.Width sd.Petal.Length sd.Petal.Width
# 1:       0.3524897      0.3790644       0.1736640      0.1053856
# 2:       0.5161711      0.3137983       0.4699110      0.1977527
# 3:       0.6358796      0.3224966       0.5518947      0.2746501

( примечание : в данном конкретном случае, так как все столбцыно группировка числовая, кажется излишним определять cols и использовать .SDcols).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...