взвешенное среднее между двумя конкретными строками - PullRequest
0 голосов
/ 28 октября 2018

У меня есть датафрейм этой формы

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

, где obs с идентификатором "7 + 10" являетсясредневзвешенное значение предыдущих наблюдений за 7 и 10 с весами 0,2 и 0,8, другими словами 43 = 0,2 * 15 + 0,8 * 50.Я пытался использовать функцию агрегата, чтобы сделать это, но это не работает.Что я могу использовать для выполнения операций между определенными строками?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 октября 2018

Поскольку работать с переменными намного проще, чем со строками, вы можете преобразовать свои данные из длинного в широкий формат с помощью пакета 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...