按组计算连续值对的平均值

时间:2017-03-30 18:01:13

标签: r grouping

目标:在数据框中按组计算每对值的平均值

示例数据:

.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

3 个答案:

答案 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)