Еще одна возможность с lapply
, нам нужно сначала преобразовать в list
:
l <- split(testtable$numericvar, testtable$groupvar)
Теперь мы можем получить quantile
, а затем преобразовать обратно в data.frame
:
ll <- lapply(l, function(x) quantile(unlist(x), c(.05, .1, .25, .5, .75, .9, .95)))
as.data.frame(ll)
# x y
# 5% -1.8028162 -1.69293054
# 10% -1.3129427 -1.23125086
# 25% -0.7335853 -0.57010352
# 50% -0.1223181 0.05119533
# 75% 0.6727871 0.66203631
# 90% 1.3411195 1.08830220
# 95% 1.7068070 1.54248740
Это можно включить в функцию для вызова, вы можете добавить к ней больше, чтобы сделать ее более общей:
quantile_grouped <- function(data, group_var = "groupvar", quantile_var = "numericvar") {
l <- split(testtable[, quantile_var], testtable[, group_var ])
ll <- lapply(l, function(x) quantile(unlist(x), c(.05, .1, .25, .5, .75, .9, .95)))
as.data.frame(ll)
}
quantile_grouped(testtable)