在R中创建多年的十分位数据?

时间:2012-04-26 15:55:16

标签: r

我在R:

中有这样的数据集
SchoolName  Year  Grade  Other_cols_not_of_interest
School1     1998  152
School2     1998  156
School3     1999  158

对于1998 - 2011年的每一年,我都想计算可用学校数据的十分位数。 (一年内,可能有40所学校的数据,而另外20所学校的数据。)

这是我想看到的输出:

Decile  Year   Value
D1      1998   100
D2      1998   110
D3      1998   125
[...]
D10     1998   170
D1      1999   105
[...]

2 个答案:

答案 0 :(得分:1)

schoolDat <- data.frame(
  'SchoolName' = rep(paste('School',1:10), each=10),
  'Year' = rep(1998:2007, 10),
  'Grade' = rpois(100, 100)
  )


tapply(schoolDat$Grade, schoolDat$Year, quantile, probs=0:10/10)

答案 1 :(得分:0)

以下是使用plyr包的版本,该包将在包含3列的数据框中返回结果。

dat <- data.frame('SchoolName' = rep(paste('School', 1:10), each=10),
              'Year' = rep(1998:2007, 10),
              'Grade' = rpois(100, 100))

require(plyr)
d <- ddply(dat, .(Year), summarise, decile_grade=quantile(Grade, 0:10/10), 
       decile_val=0:10/10)

head(d)
>   Year decile_grade decile_val
  1 1998         81.0        0.0
  2 1998         90.0        0.1
  3 1998         93.4        0.2
  4 1998        100.3        0.3
  5 1998        104.8        0.4
  6 1998        106.5        0.5