2011-09-17 101 views
0

我有兩個列表。第一個列表有選擇有限數量:R腳本 - 獲取平均值

a = [1, 1.5, 2, 2.5, 2, 2.5, 1, 1.5, 1, 2.5] 

,然後我有具有整數

b = [34, 67, 45, 12, 45, 78, 90, 50, 60, 12] 

正如你可以看到另一個列表,在列表中,唯一可能的值是1,1.5 ,2和2.5。另請注意,這兩個列表相互對應。因此,對於第一個元素,1的值爲34.

我想根據它的值(它們在b中給出)取平均值1,1.5,2和2.5中的每一個。

因此,例如,一個2具有在3位45,並在位置5因此,一個45,平均是45

如何可以作爲R做這樣的事情很好?

回答

2

我假設ab是真正的數字向量而不是列表 - 如果沒有,unlist他們使他們如此。

a <- c(1, 1.5, 2, 2.5, 2, 2.5, 1, 1.5, 1, 2.5) 
b <- c(34, 67, 45, 12, 45, 78, 90, 50, 60, 12) 
tapply(b,a,mean) 

結果:

 1  1.5  2  2.5 
61.33333 58.50000 45.00000 34.00000 
+0

不好意思啊奔,沒看到你的答案之前,我貼我的。順便說一句,你不需要使用'list' – Ramnath

+1

完美。我將刪除我的答案,以避免重複:) – Ramnath

1

兩個選項,一個從基礎R和其他在plyr

> aggregate(b, list(a), mean) 
    Group.1  x 
1  1.0 61.33333 
2  1.5 58.50000 
3  2.0 45.00000 
4  2.5 34.00000 
> library(plyr) 
> ddply(data.frame(a,b), "a", summarize, meanval = mean(b)) 
    a meanval 
1 1.0 61.33333 
2 1.5 58.50000 
3 2.0 45.00000 
4 2.5 34.00000