数组平均的部分

我有两列数据。 第一个包含测量值,第二个包含描述性string。 我想计算“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的第一行和第二行包含前两个值(aa segment)的平均值。 然后遵循bb段(= 2)的平均值,然后cc段的平均值等等。

在excel / vba或R中可能吗?

任何帮助将不胜感激

米拉

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

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

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

在R基地大大是伟大的这项任务

 > 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