你如何动态地添加行到小标题
How do you dynamically add row to a tibble
我正在使用 mlogit 包。该软件包有一些严格的数据要求。对于数据集中的每个键,行数必须相同。
这是一个带有示例的 reprex:
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
由 reprex package (v0.3.0)
创建于 2020-05-02
df 有 1、2、3 三个键。键 1 有五行观察,键 2 有 4 行观察,键 3 有三行。我需要每个键都有 5 行观察,并希望通过 tidyverse 实现这一点。我认为 add_row() 可能是我的解决方案,但我无法让它工作。这可能吗。
在我的示例中,我将 df 作为之前,将 df2 作为所需的之后。
由 reprex package (v0.3.0)
创建于 2020-05-02
我们可以根据 'key' 列的计数扩展数据集
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
我正在使用 mlogit 包。该软件包有一些严格的数据要求。对于数据集中的每个键,行数必须相同。
这是一个带有示例的 reprex:
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
由 reprex package (v0.3.0)
创建于 2020-05-02df 有 1、2、3 三个键。键 1 有五行观察,键 2 有 4 行观察,键 3 有三行。我需要每个键都有 5 行观察,并希望通过 tidyverse 实现这一点。我认为 add_row() 可能是我的解决方案,但我无法让它工作。这可能吗。
在我的示例中,我将 df 作为之前,将 df2 作为所需的之后。
由 reprex package (v0.3.0)
创建于 2020-05-02我们可以根据 'key' 列的计数扩展数据集
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