让我们说我想根据他们的cyl分组将mtcars分成3个csv文件。我可以使用mutate来执行此操作,但它会在输出中创建一个NULL
列。
library(tidyverse)
by_cyl = mtcars %>%
group_by(cyl) %>%
nest()
by_cyl %>%
mutate(unused = map2(data, cyl, function(x, y) write.csv(x, paste0(y, '.csv'))))
有没有办法在by_cyl对象上执行此操作而不调用mutate?
答案 0 :(得分:6)
以下是purrr
使用mutate
而dplyr
library(tidyverse)
mtcars %>%
split(.$cyl) %>%
walk2(names(.), ~write_csv(.x, paste0(.y, '.csv')))
的选项。
cyl
这会在保存输出之前删除library(tidyverse)
mtcars %>%
split(.$cyl) %>%
map(~ .x %>% select(-cyl)) %>%
walk2(names(.), ~write_csv(.x, paste0(.y, '.csv')))
列。
library(tidyverse)
by_cyl <- mtcars %>%
group_by(cyl) %>%
nest()
by_cyl %>%
split(.$cyl) %>%
walk2(names(.), ~write_csv(.x[["data"]][[1]], paste0(.y, '.csv')))
{{1}}
答案 1 :(得分:0)
以下是do
和group_by
的解决方案,因此,如果您的数据已按预期分组,则可以保存一行:
mtcars %>%
group_by(cyl) %>%
do(data.frame(write.csv(.,paste0(.$cyl[1],".csv"))))
data.frame
仅在此处使用,因为do
需要返回data.frame
,因此它有点黑客。