Объединение дополнительных значений во фрейме данных - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть фрейм данных как таковой:

df <- tibble(ID = c(1,1,1,2,2,2,3,3,4,5,5,5,5),
             Time = c(5,1,3,2,8,5,1,7,2,1,2,3,4),
             Output = c(1,2,3,4,5,6,7,8,9,10,11,12,13)) %>%
      arrange(ID, Time)

> df
# A tibble: 13 x 3
      ID  Time Output
   <dbl> <dbl>  <dbl>
 1     1     1      2
 2     1     3      3
 3     1     5      1
 4     2     2      4
 5     2     5      6
 6     2     8      5
 7     3     1      7
 8     3     7      8
 9     4     2      9
10     5     1     10
11     5     2     11
12     5     3     12
13     5     4     13

Данные, которые я собрал, не полны, и необходимо добавить все пропущенные значения. В моем случае у меня есть Time = 1:10. Если время уже записано, оставьте вывод как есть. В противном случае вывод должен быть 0. Это должно быть сделано для каждого идентификатора. Вот пример вывода.

      ID  Time Ouput
   <dbl> <dbl> <dbl>
 1     1     1     2
 2     1     2     0
 3     1     3     3
 4     1     4     0
 5     1     5     1
 6     1     6     0
 7     1     7     0
 8     1     8     0
 9     1     9     0
10     1    10     0

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Мы можем использовать expand с left_join

library(dplyr)
library(tidyr)
df %>%
    expand(ID, Time = 1:10) %>% 
    left_join(df)
1 голос
/ 17 апреля 2020

Использование tidyr::complete:

tidyr::complete(df, ID, Time = 1:10, fill = list(Output = 0))

# A tibble: 50 x 3
#      ID  Time Output
#   <dbl> <dbl>  <dbl>
# 1     1     1      2
# 2     1     2      0
# 3     1     3      3
# 4     1     4      0
# 5     1     5      1
# 6     1     6      0
# 7     1     7      0
# 8     1     8      0
# 9     1     9      0
#10     1    10      0
# … with 40 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...