Tidyverse добавить отсутствующий фактор и значение на основе идентификатора - PullRequest
0 голосов
/ 17 марта 2020

У меня есть data.frame с тремя факторами: a, b и c, но не каждый идентификатор имеет каждый фактор:

test <- data.frame(
  id = c(1,1,2,2,2,3,4,4),
  a = c("a", "b", "a", "b", "c", "b", "b", "c"),
  value = c(1,2,3,4,5,6,7,8))

  id a value
1  1 a     1
2  1 b     2
3  2 a     3
4  2 b     4
5  2 c     5
6  3 b     6
7  4 b     7
8  4 c     8

Как мне создать фрейм данных с a, b и c для всех моих идентификаторов, используя 0 для ненаблюдаемых факторов

Желаемый вывод

   id a value
1   1 a     1
2   1 b     2
3   1 c     0
4   2 a     3
5   2 b     4
6   2 c     5
7   3 a     0
8   3 b     6
9   3 c     0
10  4 a     0
10  4 b     7
10  4 c     8

Ответы [ 2 ]

4 голосов
/ 17 марта 2020
library(tidyr)

test %>%
  complete(id, a, fill = list(value = 0))

Выход

# A tibble: 12 x 3
      id a     value
   <dbl> <fct> <dbl>
 1     1 a         1
 2     1 b         2
 3     1 c         0
 4     2 a         3
 5     2 b         4
 6     2 c         5
 7     3 a         0
 8     3 b         6
 9     3 c         0
10     4 a         0
11     4 b         7
12     4 c         8
0 голосов
/ 17 марта 2020

Опция с использованием data.table

library(data.table)
setDT(test)[CJ(id, a, unique = TRUE), on = .(id, a)][is.na(value), value := 0][]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...