我有两列数据。首先包含测量值,第二个包含描述性字符串。我想计算“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?
任何帮助将不胜感激
米拉
答案 0 :(得分:2)
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行数据 - 根据需要进行调整