2016-05-09 50 views
2

我在R中使用data.table,我試圖根據每個FinYear提取總需求中最高的2個最高值。獲得年份列的頂部「x」值

我的實際數據集非常龐大(上升到FinYear 2016),所以我有一個子集。

這是我的數據的一個子集:

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的所有值,然後找到前兩個,然後將所有FinYears等存儲起來。

我想要一個數據表/框架/列表這是結果。

有什麼建議嗎?

回答

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] 
+0

嘿感謝,這偉大工程。我想知道你是否可以解釋它在做什麼,特別是head()位? –

+0

@Gin_Salmon剛更新了帖子。 'head'是一個從一開始就獲得n個行的基本R函數。 – akrun