我和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