1

我在 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
[...]
4

2 回答 2

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)
于 2012-04-26T16:18:34.670 回答
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
于 2012-04-26T16:36:34.453 回答