Заполнить массив данных нулями - PullRequest
0 голосов
/ 13 мая 2018

У меня есть датафрейм, выглядящий так:

A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
    ...

И я хочу добавить строку l i 0 для каждого l в A и i в {1, 2, 3, 4} так, чтобы не существовало l i k строки.

Для этого примера, если я рассмотрю {1, 2, 3, 4}, результат будет

A    B    C
a    1    3
a    2    5
a    3    0
a    4    3
b    1    2
b    2    6
b    3    0
b    4    0
    ...

Я чувствовал, что могу использовать фрейм данных, содержащий 1 2 3 4, и попытаться выполнить full_join, но я не понимаю, как с этим справиться.

Как получить этот результат?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Используя complete

df %>% complete(B = full_seq(B, 1), A,fill=list(C=0))%>%arrange(A)
# A tibble: 8 x 3
      B     A     C
  <dbl> <chr> <dbl>
1     1     a     3
2     2     a     5
3     3     a     0
4     4     a     3
5     1     b     2
6     2     b     6
7     3     b     0
8     4     b     0
0 голосов
/ 13 мая 2018

Вы можете перечислить все комбинации столбцов A и B, используя expand.grid, затем удалить все пары, уже присутствующие в исходном фрейме данных, используя sigdiff из dplyr, и добавить нулевой столбец.

library(dplyr)

D <- read.table(header=TRUE, text = "
A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
")

expand.grid(A=unique(D$A), B=1:4) %>%
  setdiff(D[,1:2]) %>%
  mutate(C=0) %>%
  bind_rows(D) %>%
  arrange(A, B)

#>   A B C
#> 1 a 1 3
#> 2 a 2 5
#> 3 a 3 0
#> 4 a 4 3
#> 5 b 1 2
#> 6 b 2 6
#> 7 b 3 0
#> 8 b 4 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...