用r在数据集中为缺失值添加行



我和R一起工作。我有一个数据集的列表,其中每个集应该有一个行长度5为每个月(1月至5月)。它应该看起来像这样:

data.frame(name = rep("B", 5), 
doc_month = c("2022.01", "2022.02", "2022.03", "2022.04", "2022.05"), 
i_name = rep("Aa",5), 
aggregation = rep("34"), 5)

但是我的一些数据集没有特定月份的数据,或者完全是空的,因此具有较短的行长度/根本没有行。这样的:

data.frame(name = "A", 
doc_month = "2022.01", 
i_name = "Aa", 
aggregation = "34")

我想扩展每个数据集,甚至是空数据集,使用特定的月份,将所有其他信息复制到行中,并将0用于聚合。

我试图使用扩展和完成的整理,但不能使它工作。

使用tidyr的complete和purrr的reduce来添加更多的数据帧

也调整了aggregation = rep(34, 5)

library(tidyverse)
df1 <- data.frame(name = rep("B", 5), 
doc_month = c("2022.01", "2022.02", "2022.03", "2022.04", "2022.05"), 
i_name = rep("Aa",5), 
aggregation = rep(34, 5))
df2 <- data.frame(name = "A", 
doc_month = "2022.01", 
i_name = "Aa", 
aggregation = 34)
reduce(list(df1, df2, df1), bind_rows) |> 
complete(doc_month, nesting(name, i_name), fill = list(aggregation = 0))
#> # A tibble: 15 × 4
#>    doc_month name  i_name aggregation
#>    <chr>     <chr> <chr>        <dbl>
#>  1 2022.01   A     Aa              34
#>  2 2022.01   B     Aa              34
#>  3 2022.01   B     Aa              34
#>  4 2022.02   A     Aa               0
#>  5 2022.02   B     Aa              34
#>  6 2022.02   B     Aa              34
#>  7 2022.03   A     Aa               0
#>  8 2022.03   B     Aa              34
#>  9 2022.03   B     Aa              34
#> 10 2022.04   A     Aa               0
#> 11 2022.04   B     Aa              34
#> 12 2022.04   B     Aa              34
#> 13 2022.05   A     Aa               0
#> 14 2022.05   B     Aa              34
#> 15 2022.05   B     Aa              34

由reprex包(v2.0.1)创建于2022-06-10

您可以使用五个月创建一个骨架数据集,然后将其连接到每个部分数据集。

library(dplyr)
library(tidyr)
data_A <- data.frame(name = "A", 
doc_month = "2022.01", 
i_name = "Aa", 
aggregation = "34")
reference <- data.frame(doc_month = c("2022.01", "2022.02", "2022.03", "2022.04", "2022.05"))
data_A |>
full_join(reference, by = "doc_month") |> 
mutate(aggregation = replace_na(aggregation, "0")) |>
fill(name, i_name)

输出:

#>   name doc_month i_name aggregation
#> 1    A   2022.01     Aa          34
#> 2    A   2022.02     Aa           0
#> 3    A   2022.03     Aa           0
#> 4    A   2022.04     Aa           0
#> 5    A   2022.05     Aa           0

由reprex包(v2.0.1)创建于2022-06-10

最新更新