Создать строки для заполнения пропущенных значений, группируя по дате - PullRequest
0 голосов
/ 18 апреля 2020

Допустим, у меня есть такой фрейм данных.

Здесь есть люди, недели и числа, которые накапливаются за прошедшие недели.

    df <- tribble(
  ~week, ~author, ~n,
  "W1",  "John", 1,
  "W1",  "Jack", 2,
  "W2",  "John", 2,
  "W2",  "Annie", 3,
  "W2",  "Peter", 1,
  "W3",  "Annie", 4,
  "W3",  "John",  3,
  "W3",  "Jack", 3
)

Теперь, что я? Я хотел бы сделать это group_by week, и иметь всех авторов (Jack, John, Ann ie и Peter) для каждой недели, сохраняя номер прошлой недели на случай, если не было суммирования.

I можно использовать complete() или fill(), чтобы сохранить число с прошлой недели, я думаю, после sort(df, week, author), но я не понимаю, как добавлять авторов в случае, если на этой неделе они ничего не произвели.

Это результат, который я хотел бы увидеть

df <- tribble(
  ~week, ~author, ~n,
  W1,  "John", 1,
  W1,  "Jack", 2, 
  W1,  "Annie", 0,
  W1,  "Peter", 0,
  W2,  "John", 2,
  W2,  "Annie", 3,
  W2,  "Peter", 1,
  W2,  "Jack", 2
  W3,  "Annie", 4,
  W3,  "John",  3,
  W3,  "Jack", 3,
  W3,  "Peter", 1
)

Спасибо!

1 Ответ

3 голосов
/ 18 апреля 2020

Сначала мы можем complete пропущенные author из каждого week, fill их с предыдущим значением и replace NA значений с 0.

library(dplyr)
library(tidyr)

df %>%
  complete(week, author) %>%
  group_by(author) %>%
  fill(n) %>%
  mutate(n = replace_na(n, 0))


#   week  author     n
#   <chr> <chr>  <dbl>
# 1 W1    Annie      0
# 2 W1    Jack       2
# 3 W1    John       1
# 4 W1    Peter      0
# 5 W2    Annie      3
# 6 W2    Jack       2
# 7 W2    John       2
# 8 W2    Peter      1
# 9 W3    Annie      4
#10 W3    Jack       3
#11 W3    John       3
#12 W3    Peter      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...