一次将函数应用于数据帧列表 n 个列表元素
Apply a function to a list of dataframes n list elements at a time
我有一个包含分组变量的数据框。使用 group_split
创建数据帧列表很简单,但我想转过身来制作一个图,使用分面一次将这 5 个分组。为了可重复性,我将使用 mtcars
ldf <- mtcars %>%
group_split(carb)
现在我对如何做相当于:
ldf[1:3] %>%
bind_rows( .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
ldf[4:6] %>%
bind_rows( .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
我不需要用 [1:3]、[4:6] 等手动分割列表,只需提供一个 n 值,例如 3 或 5。
首选 tidyverse 解决方案第二选择基础 r。提前谢谢你
根据评论,这是我的建议,没有 group_split
:
n_per_group = 3
mtcars %>%
mutate(
carb_grp = as.integer(factor(carb)),
plot_grp = (carb_grp - 1) %/% n_per_group
) %>%
group_by(plot_grp) %>%
group_map(
~ggplot(., aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
)
总的来说,我发现在 group_split
之后我可能想做的大部分事情都可以用 group_map
来完成,而且有时将数据放在一起有好处——比如方便重组,如本例所示。
我认为您应该首先查看不需要拆分的解决方案,然后 un-splitting ...但是如果您坚持使用它,那么您可以像这样对它们进行分组:
ggs <- split(ldf, (seq_along(ldf)-1) %/% 3) %>%
lapply(function(z) {
bind_rows(z, .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
})
(生成一个 list
的 2 gg
个对象。)
我有一个包含分组变量的数据框。使用 group_split
创建数据帧列表很简单,但我想转过身来制作一个图,使用分面一次将这 5 个分组。为了可重复性,我将使用 mtcars
ldf <- mtcars %>%
group_split(carb)
现在我对如何做相当于:
ldf[1:3] %>%
bind_rows( .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
ldf[4:6] %>%
bind_rows( .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
我不需要用 [1:3]、[4:6] 等手动分割列表,只需提供一个 n 值,例如 3 或 5。
首选 tidyverse 解决方案第二选择基础 r。提前谢谢你
根据评论,这是我的建议,没有 group_split
:
n_per_group = 3
mtcars %>%
mutate(
carb_grp = as.integer(factor(carb)),
plot_grp = (carb_grp - 1) %/% n_per_group
) %>%
group_by(plot_grp) %>%
group_map(
~ggplot(., aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
)
总的来说,我发现在 group_split
之后我可能想做的大部分事情都可以用 group_map
来完成,而且有时将数据放在一起有好处——比如方便重组,如本例所示。
我认为您应该首先查看不需要拆分的解决方案,然后 un-splitting ...但是如果您坚持使用它,那么您可以像这样对它们进行分组:
ggs <- split(ldf, (seq_along(ldf)-1) %/% 3) %>%
lapply(function(z) {
bind_rows(z, .id = "column_label") %>%
ggplot(aes(x = disp, y = hp)) +
geom_line() +
facet_wrap(carb ~ ., ncol = 1)
})
(生成一个 list
的 2 gg
个对象。)