如何计算相邻行的平均值?
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
我得到了一份 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