如何计算相邻行的平均值?

How to calculate average of adjacent rows?

我得到了一份 DF,里面有人们的薪水数据和他们的工作。一排是一个人。我需要计算同一份工作的 3 个人的平均工资,并从中制作一个新的 DF。如果 DF 从最高工资到最低工资排序,则这 3 个人需要从事相同的工作并且他们的工资需要相邻。如果他们有相同的工作,则他们自己以及 DF 中高于和低于他们的人的平均工资。一份工作中薪水最高和最低的人被排除在外,因为没有人高于或低于他们。

这是我拥有的数据样本

Job     salary
IT       5000
IT       4500
IT       4000
IT       4000
Sales    4500
Sales    4500
Sales    4000
Sales    3000
Sales    2500
HR       3000
HR       2500
HR       2300

这就是我想要得到的(如果平均工资到小数位我四舍五入。但是在R DF中没有必要这样做。小数位就可以了。

Job    salary
IT      4500
IT      4167
Sales   4333
Sales   3833
Sales   3167
HR      2600

我被困住了,因为我无法弄清楚如何计算同一工作的 3 个人的平均值并排除顶部和底部。希望能帮到你。

谢谢

您想要一个按组的滚动平均值。这可以通过 zoo::rollmean 加上 dplyr::group_by.

来完成
library(dplyr)
library(zoo)

dat %>% 
  group_by(Job) %>% 
  summarise(mean = rollmean(salary, 3, align = "right"))

  Job    mean
  <fct> <dbl>
1 IT    4500 
2 IT    4167.
3 Sales 4333.
4 Sales 3833.
5 Sales 3167.
6 HR    2600 

这里有一些基本的 R 选项

> with(df,stack(tapply(salary, Job, function(x) rowMeans(embed(x, 3)))))
    values   ind
1 2600.000    HR
2 4500.000    IT
3 4166.667    IT
4 4333.333 Sales
5 3833.333 Sales
6 3166.667 Sales

> aggregate(salary ~ ., df, function(x) rowMeans(embed(x, 3)))
    Job                       salary
1    HR                         2600
2    IT           4500.000, 4166.667
3 Sales 4333.333, 3833.333, 3166.667