每组做分位数
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)))))
所以我完全是 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)))))