2013-11-26 18 views
0

我有數據,看起來像下面的R - 修改級別的順序tapply功能

nums  r  a 
1 3  210  0 
4 6  3891 1 
9 8  891  1 
1 3  321  1 
8 1  32  0 
etc  etc  etc 

我想計算的幾件事情,並想知道如果有人能幫助以下

提供代碼
  1. 每個nums值(例如,上方,用於1 3平均a0.5)平均a值,由平均最高值a排序。我想tapply會解決這個問題,但我不知道如何處理排序組件。
  2. 數值爲每個nums值的平均值a,按預定的nums排序。例如,像tapply(df$ac, df$nums, mean, orderBy=c("1 3", "4 6", "8 1", etc.))。您可以假定我的訂單涵蓋了每種可能的nums值。

回答

1

使用tapply

agg <- with(data, tapply(a, nums, FUN = mean)) 

然後1,做:

sort(agg, decreasing = TRUE) 

爲2,這樣做:

agg[predetermined.nums] 

您還可以使用aggregate

agg <- aggregate(a ~ nums, data, FUN = mean) 

然後1,做:

agg[order(agg$a, decreasing = TRUE), ] 

爲2,這樣做:

agg[match(predetermined.nums, agg$nums), ] 
+0

對於tapply,#2不工作。對於聚合,#2工作,但它輸出作爲一個數據框,而不是正常輸出tapply。 – CodeGuy

+1

很難說,因爲你沒有提供一個可重複的例子......你能自己弄清楚嗎?畢竟它是簡單的索引。 – flodel

+0

對你來說可能很簡單,但我對R有些新意。你能否將你的聚合方法的輸出重新格式化爲看起來像tapply調用的輸出? – CodeGuy