我想找出每个分组变量的十分位数。我正在专门寻找使用dplyr
and的方法lapply
。如果您能帮助我,我将不胜感激。
这是我的尝试。除了打电话之外,我不知道如何直接拉十分位数dplyr::ntile()
(这对我不起作用)
尝试 1
这是我尝试describe()
从Hmisc
包中使用的内容:
set.seed(10)
IData <- data.frame(let = sample( x = LETTERS, size = 10000, replace=TRUE), numbers = sample(x = c(1:20000),size = 10000))
Output<-IData %>% data.table::as.data.table(.) %>% split(.,by=c("let"),drop = TRUE,sorted = TRUE) %>% purrr::map(~describe(.$numbers))
这当然有帮助,但上面的代码有两个问题:
a) 输出(甚至是列表格式)不是我想要的。
b) 我真的不知道如何从上面的列表中提取 5%、10%...。
底线是我被卡住了
尝试 2
我尝试用 替换describe
,ntile
但下面的代码给了我一个对我来说没有意义的输出,因为列数不是 10。运行Output[[1]]
时,我看到一个约 400 个数字而不是 10 个的向量。
Output<-IData %>% data.table::as.data.table(.) %>% split(.,by=c("let"),drop = TRUE,sorted = TRUE) %>% purrr::map(~dplyr::ntile(.$numbers,10))
尝试 3 =预期输出
最后,我尝试使用老派(即复制粘贴)来获得预期的输出:
Output<-IData %>%
dplyr::group_by(let) %>%
dplyr::summarise( QQuantile1 = quantile(`numbers`, c(.10)),
QQuantile1 = quantile(`numbers`, c(.10)),
QQuantile2 = quantile(`numbers`, c(.20)),
QQuantile3 = quantile(`numbers`, c(.30)),
QQuantile4 = quantile(`numbers`, c(.40)),
QQuantile5 = quantile(`numbers`, c(.50)),
QQuantile6 = quantile(`numbers`, c(.60)),
QQuantile7 = quantile(`numbers`, c(.70)),
QQuantile8 = quantile(`numbers`, c(.80)),
QQuantile9 = quantile(`numbers`, c(.90)),
QQuantile10 = quantile(`numbers`, c(.100)))
问题:有人可以帮助我通过使用这三种(不是一种,但最好是所有学习方法)生成上述输出
1) 应用
2)dplyr
3) 数据表
我查看了关于 SO 的几个线程,但它们都在谈论特定的分位数,而不是全部。例如,按组线程从数据帧中查找前十分位数。