我在 R 中有这个数据集。我想用 R 包重新转换它。
dt <-
data.table(
month = seq(1, 12),
aa_2019 = seq(1, 12),
bb_2019 = seq(1, 12),
aa_2020 = seq(1, 12),
bb_2020 = seq(1, 12),
aa_2021 = seq(1, 12),
bb_2021 = seq(1, 12),
aa_2022 = seq(1, 12),
bb_2022 = seq(1, 12)
)
Run Code Online (Sandbox Code Playgroud)
所需的输出如下所示。有没有办法自动制作?想象一下从 1900 年到 2023 年的年份序列。
reactable(
dt,
columns = list(
aa_2019 = colDef(name = "aa"),
bb_2019 = colDef(name = "bb"),
aa_2020 = colDef(name = "aa"),
bb_2020 = colDef(name = "bb"),
aa_2021 = colDef(name = "aa"),
bb_2021 = colDef(name = "bb"),
aa_2022 = colDef(name = "aa"),
bb_2022 = colDef(name = "bb")
),
columnGroups = list(
colGroup(name = "2019", columns = c("aa_2019", "bb_2019")),
colGroup(name = "2020", columns = c("aa_2020", "bb_2020")),
colGroup(name = "2021", columns = c("aa_2021", "bb_2021")),
colGroup(name = "2022", columns = c("aa_2022", "bb_2022"))
)
)
Run Code Online (Sandbox Code Playgroud)
这是动态创建colDefs 和colGroups 的一种方法:
library(reactable)
cols <- names(dt)[-1]
cols_split <- strsplit(cols, "_")
cols <- data.frame(
name = cols,
group = sapply(cols_split, `[[`, 1),
year = sapply(cols_split, `[[`, 2)
)
col_defs <- lapply(
cols$group,
\(x) {
colDef(name = x)
}
) |>
setNames(cols$name)
col_groups <- cols |>
split(~year) |>
lapply(\(x) {
colGroup(name = unique(x$year), columns = x$name)
}) |>
unname()
reactable(
dt,
columns = col_defs,
columnGroups = col_groups
)
Run Code Online (Sandbox Code Playgroud)