我有两个清单。第一个列表包含有限数量的选项:
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]
如您所见,在列表a中,唯一可能的值为1,1.5,2和2.5。另请注意,这两个列表彼此对应。因此,对于第一个元素,1的值为34.
我想平均分别为1,1.5,2和2.5,具体取决于它所具有的值(在b中给出)。
因此,例如,2在位置3中有45,在位置5中有45.因此,平均值为45。
我怎样才能在R中做到这一点?
答案 0 :(得分:2)
我认为a
和b
实际上是数字向量而不是列表 - 如果不是,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
答案 1 :(得分: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