R 根据分组为每行分配十分位数

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.

我有一个包含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.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,你有联系吗?