每组做分位数

Doing quantiles per group

所以我完全是 R 的新手,在我们的最后一项任务中,我们想对每个国家/地区和每个列的数据进行分位数。

我们尝试过用apply函数来做,有循环,但还没能破解:

    Ano                                           Paises      Males.total
1 2011                                          Belgium        19.5
2 2011                                         Bulgaria        46.4
3 2011                                          Czechia        11.9
4 2011                                          Denmark        17.5
5 2011 Germany (until 1990 former territory of the FRG)        18.5
6 2011                                          Estonia        22.9
  Females.total Malessinterminar Females.sin.terminar malespostsecundaria
1            21               33                 34.3                16.7
2          49.7             72.1                 75.1                42.1
3          16.4             32.3                 28.6                11.2
4          17.9             24.6                 24.4                16.8
5          21.3             38.5                 34.7                21.5
6          22.5               34                 35.4                24.3
  Femalespostsecundaria Males.universidad Femalesuniversidad
1                    19              10.6               10.1
2                  45.4              17.1               24.9
3                  15.7               4.1                5.4
4                  17.8              11.9               12.1
5                  21.5              10.3               13.4
6                    27              10.5               10.7

我们已经尝试过这个循环,我们希望按国家/地区处理每一列数据。问题是这个操作给了我们不止一个结果,所以循环不计算它:

estadosunicos<-unique(paises)
resultados<-matrix(0,length(estadosunicos),ncol = 3)
for (i in 1:length(estadosunicos)){
  selec<-estadosunicos[i]
  resultados[i,1]<-males.sin.terminar[paises==estadosunicos][females.sin.terminar<quantile(females.sin.terminar, 0.25)]
  resultados[i,2]<-males.sin.terminar[paises==estadosunicos][males.sin.terminar>quantile(males.sin.terminar,0.25)& males.sin.terminar<quantile(males.sin.terminar,0.75)]
  resultados[i,3]<-males.sin.terminar[paises==estadosunicos][males.sin.terminar>quantile(males.sin.terminar,0.75)]
}
rownames(resultados)<-estadosunicos

所以我们不知道该怎么做。我们想按国家/地区获取这些数据的 25%、50% 和 75%,但我们有 300 多行信息,因此这些国家/地区在不同年份重复了多次。我们该怎么做?非常感谢您的帮助!

我们可以按操作进行分组,然后通过循环 across 列然后 return 一个 list 对象在每个数字列上得到 quantile可以使用 unnest_wider 等将其转换为列

library(dplyr)
df1 %>%
  select(-Ano) %>% 
  group_by(paises) %>% 
  summarise(across(where(is.numeric), ~ 
     list(as.list(quantile(.x, prob = c(.25, 0.5, 0.75)))))