两个特定行之间的加权平均值

时间:2018-10-28 15:33:17

标签: r

我有这种形式的数据框

id  value
1   10
2   25
5   30
7   15
9   30
10  50

我想通过以下方式对其进行转换

    id    value
    1     10
    2     25
    5     30
    9     30
    7+10  43

其中id为“ 7 + 10”的obs是权重为0.2和0.8的7和10的先前obs的加权平均值,换句话说为43 = 0.2 * 15 + 0.8 * 50。我试图使用函数聚合来执行此操作,但是它不起作用。我可以使用什么在特定行之间进行操作?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

由于使用变量比使用行要容易得多,因此可以使用tidyr软件包(tidyverse的一部分)将数据从长格式转换为宽格式,进行转换,然后再转换为长格式再次与提迪尔:

library(tidyverse)

dat <- tibble(
  id = c(1, 2, 5, 7, 9, 10),
  value = c(10, 25, 30, 15, 30, 50)
)

dat %>%
  spread(id, value) %>%
  mutate(`7 + 10` = 0.2 * `7` + 0.8 * `10`) %>%
  select(- `7`, - `10`) %>%
  gather("id", "value", everything())

  id     value
  <chr>  <dbl>
1 1         10
2 2         25
3 5         30
4 9         30
5 7 + 10    43