2011-09-17 62 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