目标:在数据框中按组计算每对值的平均值
示例数据:
.nav_menu_head
预期输出:
mtcars[1:10, 1:2] %>%
arrange(cyl)
mpg cyl
22.8 4
24.4 4
22.8 4
21.0 6
21.0 6
21.4 6
18.1 6
19.2 6
18.7 8
14.3 8
以为我可以使用mpg cyl avg
22.8 4 -
24.4 4 23.6
22.8 4 23.6
21.0 6 -
21.0 6 21.0
21.4 6 21.2
18.1 6 19.75
19.2 6 18.65
18.7 8 -
14.3 8 16.5
或dplyr::lag
来执行此操作,但尚未使用它。没有与dplyr结婚,任何解决方案都将不胜感激......
尝试:
dplyr::slice
答案 0 :(得分:2)
这是一个带有ave
的基本R方法。
# get data
temp <- mtcars[order(mtcars$cyl), c("mpg", "cyl")]
# calculate value pairwise means
temp$avg <- ave(temp$mpg, temp$cyl, FUN=function(i) (i + c(NA, head(i, -1))) / 2)
这里,mpg被添加到滞后值并除以2.滞后值是使用head
构造的,最后一个元素被移除(-1
)并且NA连接到初始位置。 / p>
返回
head(temp)
mpg cyl avg
Datsun 710 22.8 4 NA
Merc 240D 24.4 4 23.60
Merc 230 22.8 4 23.60
Fiat 128 32.4 4 27.60
Honda Civic 30.4 4 31.40
Toyota Corolla 33.9 4 32.15
答案 1 :(得分:1)
我们需要一个滚动的平均值(来自rollmean
的{{1}})按“&#39;
zoo
答案 2 :(得分:1)
使用dplyr
...
mtcars %>% group_by(cyl) %>% mutate(pairmean=(mpg+lag(mpg))/2)