R 根据分组为每行分配十分位数
我有一个包含10000个观察值的数据框,希望有一个新的列,每行对应一个十分位数。十分位数分布应按年份分组。这样做的最佳方式是什么R 根据分组为每行分配十分位数,r,R,我有一个包含10000个观察值的数据框,希望有一个新的列,每行对应一个十分位数。十分位数分布应按年份分组。这样做的最佳方式是什么 year value quartile 1 2000 2.55118169 NA 2 2000 0.79755259 NA 3 2000 0.16918905 NA 4 2001 1.73359245 NA 5 2001 0.41027113 NA 6 2001 0.
year value quartile
1 2000 2.55118169 NA
2 2000 0.79755259 NA
3 2000 0.16918905 NA
4 2001 1.73359245 NA
5 2001 0.41027113 NA
6 2001 0.73012966 NA
7 2002 -1.35901658 NA
8 2002 -0.80591167 NA
9 2002 0.48966739 NA
10 2003 0.88856758 NA
11 2003 0.05146856 NA
12 2003 -0.12310229 NA
像这样使用
dplyr
可以得到您想要的东西。假设实际的mydata
中每年有>=10个值
library(dplyr)
mydata <- mydata %>%
group_by(year) %>%
mutate(decile = ntile(value, 10)) %>%
ungroup()
库(dplyr)
mydata%
组别(年份)%>%
突变(十分位数=分位数(值,10))%>%
解组()
函数ave
通过分组因子(在本例中为年)为您提供评估函数的结果。在这里,dplyr::ntile
函数对于获取小数非常有用
mydata$decile <- ave(mydata$value, mydata$year, FUN=function(x) { dplyr::ntile(x, 10) } )
mydata$decile-decile,或您的示例数据中的四分位?按decile,我的数据集每年有数百个值,仅包含一个样本,但它似乎没有给我相同大小的十分位。例如,我在2017年有500次观察,但十分位1有100次观察,而十分位10有50次观察。我在运行时,每组每十分位有50次观察:tibble(Year=c(rep(2016,500),rep(2017,500)),value=sample(1:1000,replace=TRUE))%%>%group_by(Year)%%>%mutate(decile=ntile(value,10))%%>%count(十分位)
。所以,也许你的数据还有其他问题。@Alex,你有联系吗?