如何将dplyr组写入单独的文件?

Nat*_*Nat 14 csv r dplyr readr

我正在尝试为与dplyr的group_by函数分组的数据框中的每个组创建单独的.csv文件.到目前为止我有类似的东西

by_cyl <- group_by(mtcars, cyl)
do(by_cyl, write_csv(., "test.csv"))
Run Code Online (Sandbox Code Playgroud)

正如所料,这会写一个.csv文件,只包含最后一组的数据.如何修改它来编写多个.csv文件,每个文件的文件名都包含cyl?

Sil*_*ood 14

您可以将csv写入过程包装在自定义函数中,如下所示.注意,该函数必须返回一个data.frameelse,它返回一个错误Error: Results are not data frames at positions

这将返回名为"mtcars_cyl_4.csv","mtcars_cyl_6.csv"和"mtcars_cyl_8.csv"的3个csv文件

customFun  = function(DF) {
write.csv(DF,paste0("mtcars_cyl_",unique(DF$cyl),".csv"))
return(DF)
}

mtcars %>% 
group_by(cyl) %>% 
do(customFun(.))
Run Code Online (Sandbox Code Playgroud)


akr*_*run 9

有了dplyr_0.8.0这个功能也可以用group_by_walk

library(dplyr)
library(readr)
mtcars %>%
   group_by(cyl) %>%
   group_walk(~ write_csv(.x, paste0(.y$cyl, "test.csv")))
Run Code Online (Sandbox Code Playgroud)

  • 我不知道有这个功能,谢谢您的回答! (2认同)

CPa*_*Pak 7

以下工作(您可以跳过自定义功能)

library(dplyr)
library(readr)
group_by(mtcars, cyl) %>%
  do(write_csv(., paste0(unique(.$cyl), "test.csv")))
Run Code Online (Sandbox Code Playgroud)