按年份

时间:2016-05-09 05:44:24

标签: r sorting dataframe

我在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存储等等。

我想要一个数据表/帧/列表。

有什么建议吗?

1 个答案:

答案 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]