我在R中使用data.table,并且我试图根据每个FinYear提取总需求中的前2个最高值。
我的实际数据集非常庞大(2016年前的FinYear),所以我有一个子集。
这是我数据的一个子集:
x
totaldemand FinYear
1: 4708.667 2000
2: 4448.833 2000
3: 4360.025 2000
4: 4523.167 2000
5: 4504.558 2000
6: 4552.167 2001
7: 4548.750 2001
8: 4451.500 2001
9: 4057.333 2001
10: 4232.167 2001
11: 4523.833 2002
12: 4517.000 2002
13: 4469.500 2002
14: 4379.833 2002
15: 4473.500 2002
16: 4243.333 2003
17: 4270.000 2003
18: 4611.333 2003
19: 4688.333 2003
20: 4720.183 2003
21: 4691.667 2004
22: 4554.167 2004
23: 4217.000 2004
24: 4224.500 2004
25: 4521.167 2004
26: 4549.000 2005
27: 4490.000 2005
28: 4492.167 2005
29: 4416.333 2005
30: 4189.833 2005
31: 4481.000 2000
32: 4583.167 2000
33: 4540.667 2000
34: 4567.333 2000
35: 4510.833 2000
36: 4274.333 2001
37: 4198.167 2001
38: 4392.000 2001
39: 4357.000 2001
40: 4419.667 2001
41: 4439.042 2002
42: 4398.667 2002
43: 4221.667 2002
44: 4172.750 2002
45: 4417.667 2002
46: 4479.510 2003
47: 4527.833 2003
48: 4454.843 2003
49: 4492.177 2003
50: 4225.833 2003
我想要做的是根据每个财政年度获得总需求的前2个值。
我想查看FinYear = 2000的所有值,然后找到前2然后存储它。
然后我想查看FinYear = 2001的所有值,然后找到前2位,然后为所有FinYears存储等等。
我想要一个数据表/帧/列表。
有什么建议吗?
答案 0 :(得分:1)
我们可以order
“FinYear”和“totaldemand”(降序),按“FinYear”分组,并使用head
对前两行进行分组。
x[order(FinYear, -totaldemand), head(.SD, 2), by = FinYear]
# FinYear totaldemand
# 1: 2000 4708.667
# 2: 2000 4583.167
# 3: 2001 4552.167
# 4: 2001 4548.750
# 5: 2002 4523.833
# 6: 2002 4517.000
# 7: 2003 4720.183
# 8: 2003 4688.333
# 9: 2004 4691.667
#10: 2004 4554.167
#11: 2005 4549.000
#12: 2005 4492.167
我们也可以
,而不是使用.SD
x[order(FinYear, -totaldemand), .(totaldemand = totaldemand[1:2]), by = FinYear]