Как вы динамически добавляете строку в тибл

Я работаю с пакетом mlogit. Пакет предъявляет жесткие требования к данным. Для каждого ключа в наборе данных должно быть одинаковое количество строк.

Вот репрезент с примером:

library(reprex)
#> Warning: package 'reprex' was built under R version 3.5.3
## Have This
df <- tibble( key = c(1,1,1,1,1,2,2,2,2,3,3,3),y=c(2,2,2,2,2,2,2,2,2,2,2,2), z=c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE))
#> Error in tibble(key = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3), y = c(2, : could not find function "tibble"
df
#> function (x, df1, df2, ncp, log = FALSE) 
#> {
#>     if (missing(ncp)) 
#>         .Call(C_df, x, df1, df2, log)
#>     else .Call(C_dnf, x, df1, df2, ncp, log)
#> }
#> <bytecode: 0x0000000013f046d0>
#> <environment: namespace:stats>

#Want this via tidyverse 
df2 <- tibble( key = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),y=c(2,2,2,2,2,2,2,2,2,0,2,2,2,0,0), z=c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,FALSE,FALSE))
#> Error in tibble(key = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3), : could not find function "tibble"
df2
#> Error in eval(expr, envir, enclos): object 'df2' not found

Создано 02.05.2020 с помощью пакета REPEX (v0.3.0)

df имеет три ключа 1, 2 и 3. Ключ 1 имеет пять рядов наблюдений, ключ 2 - 4 ряда наблюдений, а ключ 3 - три ряда. Мне нужно, чтобы каждый ключ имел 5 рядов наблюдений, и я бы хотел добиться этого с помощью тидиверса. Я думал, что add_row () может быть моим решением, но не смог заставить его работать. Это возможно.

В моем примере у меня есть df как до и df2 как желаемое после.

Создано 02.05.2020 с помощью пакета REPEX (v0.3.0)


person Mutuelinvestor    schedule 02.05.2020    source источник


Ответы (1)


Мы могли бы расширить набор данных на основе количества «ключевых» столбцов.

library(dplyr)
library(tidyr)
library(data.table)
df %>%
     mutate(ind = rowid(key)) %>%
     complete(key, ind) %>%
     select(-ind) %>%
     fill(z) %>%
     mutate(y = replace_na(y, 0))
# A tibble: 15 x 3
#     key     y z    
#   <dbl> <dbl> <lgl>
# 1     1     2 TRUE 
# 2     1     2 FALSE
# 3     1     2 FALSE
# 4     1     2 FALSE
# 5     1     2 FALSE
# 6     2     2 TRUE 
# 7     2     2 FALSE
# 8     2     2 FALSE
# 9     2     2 FALSE
#10     2     0 FALSE
#11     3     2 TRUE 
#12     3     2 FALSE
#13     3     2 FALSE
#14     3     0 FALSE
#15     3     0 FALSE
person akrun    schedule 02.05.2020
comment
Я не был знаком с полным, что в сочетании с rowid (ключ), безусловно, помогает. Очень признателен. - person Mutuelinvestor; 02.05.2020