按列对数据进行分组,找到每个组中的百分比值

时间:2016-06-03 20:21:16

标签: r

我有这样的数据集:

year | age | value
----------------------
2005 | 8   | 10
2005 | 8   | 12
2005 | 8   | 30
2005 | 8   | 12
2006 | 5   | 10
2006 | 5   | 20
2006 | 5   | 15
2006 | 5   | 20
2007 | 8   | 16
2007 | 8   | 20
2007 | 8   | 18
2007 | 5   | 20

约50000行

我想要的是为每个子组的值获得最高30%的子集 - 像这样

year | age | value
----------------------
 2005 | 8   | 30
 2005 | 8   | 30
 2006 | 5   | 20
 2006 | 5   | 20
 2007 | 8   | 20
 2007 | 5   | 20

这意味着:行具有年度最高30%的值:2005年,年龄:8岁,年份:2005年,年龄:5岁,年份:2006年,年龄:8岁,年份:2005年,年龄:5岁......等等

2 个答案:

答案 0 :(得分:3)

这是一种使用data.table的快速方法:

library(data.table)

dt <- as.data.table(read.table(header=T,text="year age  value
  2005  8    10
2005  8    12
2005  8    30
2005  8    12
2006  5    10
2006  5    20
2006  5    15
2006  5    20
2007  8    16
2007  8    20
2007  8    18
2007  5    20"))


dt[dt[,.I[value >= quantile(value,0.7)],by=c("year","age")]$V1]

   year age value
1: 2005   8    30
2: 2006   5    20
3: 2006   5    20
4: 2007   8    20
5: 2007   5    20

答案 1 :(得分:3)

library(dplyr)
df %>% group_by(year, age) %>% filter(value >= quantile(value, probs = 0.7))

Source: local data frame [5 x 3]
Groups: year, age [4]

   year   age value
  (dbl) (dbl) (int)
1  2005     8    30
2  2006     5    20
3  2006     5    20
4  2007     8    20
5  2007     5    20