按部件平均的阵列

时间:2013-11-26 15:28:34

标签: r excel vba

我有两列数据。首先包含测量值,第二个包含描述性字符串。我想计算“desc”没有变化的段中的平均值。例如:

values  desc    avg
1       aa       1
1       aa       1
1       bb       2
2       bb       2
2       bb       2
3       bb       2
3       cc     5.5
8       cc     5.5
8       aa     3.5
2       aa     3.5
2       aa     3.5
2       aa     3.5

名为“avg”的列是我想要的。第一行和第二行avg包含前两个值(aa段)的平均值。然后遵循bb段的平均值(= 2),然后是cc段的平均值等等......

是否可以在excel / vba或R?

任何帮助将不胜感激

米拉

2 个答案:

答案 0 :(得分:2)

R base中的

ave非常适合此任务

> df$avg <- with(df, ave(values, desc, FUN=mean))
> df
   values desc avg
1       1  aaa 1.0
2       1  aaa 1.0
3       1   bb 2.0
4       2   bb 2.0
5       2   bb 2.0
6       3   bb 2.0
7       3   cc 5.5
8       8   cc 5.5
9       8   aa 3.5
10      2   aa 3.5
11      2   aa 3.5
12      2   aa 3.5

data.table也很棒

> library(data.table)
> dt <- data.table(df)
> dt[, avg:=mean(values), by="desc"]
> dt

答案 1 :(得分:1)

在Excel中,您可以在C2处理中使用此公式

=IF(B2=B1,C1,AVERAGE(A2:INDEX(A2:A$1000,MATCH(TRUE,INDEX(B3:B$1000<>B2,0),0))))

假设您有多达1000行数据 - 根据需要进行调整