Добавить строки данных в таблицу в зависимости от содержимого одного столбца - PullRequest
2 голосов
/ 20 июня 2019

Я хочу автоматически добавить одну или несколько строк в существующий tibble в зависимости от значений, представленных в одном из столбцов tibble.

Данные

    A   B   C   D     E
1   1   1   1   5   7.81
2   1   1   1   4   13.12
3   1   1   1   5   3.39
4   1   1   1   4   3.28
5   1   1   1   5   2.69
6   1   1   1   2   5.70
7   1   1   1   1   8.22

Ожидаемый результат, если '3' отсутствует в 'D'

    A   B   C   D     E
1   1   1   1   5   7.81
2   1   1   1   4   13.12
3   1   1   1   5   3.39
4   1   1   1   4   3.28
5   1   1   1   5   2.69
6   1   1   1   2   5.70
7   1   1   1   1   8.22
8   1   1   1   3   0.00

В столбце tibble D значения должны варьироваться от 1:5 в зависимости от набора данных.

Я хочу иметь возможность определить, отсутствуют ли одно или несколько чисел из этого диапазона в столбце D, и, если отсутствует одно значение (например, 3), я хочу добавить новую строку, которая копирует данныев столбцах A : C и вводит 3 в столбце D и 0 в столбце E.Если два или более значений отсутствуют (например, 3 и 4), я хочу добавить две строки и т. Д.

1 Ответ

3 голосов
/ 20 июня 2019

Вы можете использовать tidyr::complete:

library(tidyverse)

Data %>% 
     complete(nesting(A,B,C), D = seq(min(D), max(D), 1L))

#> # A tibble: 8 x 5
#>       A     B     C     D     E
#>   <int> <int> <int> <int> <dbl>
#> 1     1     1     1     1  8.22
#> 2     1     1     1     2  5.7 
#> 3     1     1     1     3 NA   
#> 4     1     1     1     4 13.1 
#> 5     1     1     1     4  3.28
#> 6     1     1     1     5  7.81
#> 7     1     1     1     5  3.39
#> 8     1     1     1     5  2.69

Я бы рекомендовал не использовать 0 вместо NA, но если вы хотите добавить их внизу и иметь их как 0, тогда это работает:

Data %>% 
     complete(nesting(A,B,C), D = seq(min(D), max(D), 1L)) %>% 
     arrange(is.na(E)) %>% 
     mutate(E = replace_na(E, 0))

#> # A tibble: 8 x 5
#>       A     B     C     D     E
#>   <int> <int> <int> <int> <dbl>
#> 1     1     1     1     1  8.22
#> 2     1     1     1     2  5.7 
#> 3     1     1     1     4 13.1 
#> 4     1     1     1     4  3.28
#> 5     1     1     1     5  7.81
#> 6     1     1     1     5  3.39
#> 7     1     1     1     5  2.69
#> 8     1     1     1     3  0

Создано в 2019-06-20 пакетом представ. (v0.3.0)

...