我有这样的数据集:
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岁......等等
答案 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