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

zf9nrax1  于 2023-03-05  发布在  其他
关注(0)|答案(4)|浏览(140)

我尝试为使用dplyr的group_by函数分组的数据框中的每个组创建单独的.csv文件。

by_cyl <- group_by(mtcars, cyl)
do(by_cyl, write_csv(., "test.csv"))

正如预期的那样,这只写入了一个.csv文件,其中只包含最后一组的数据。我如何修改它以写入多个.csv文件,每个文件名都包含cyl?

wfsdck30

wfsdck301#

对于dplyr_0.8.0,可以使用group_bygroup_walk完成此操作

library(dplyr)
library(readr)
mtcars %>%
   group_by(cyl) %>%
   group_walk(~ write_csv(.x, paste0(.y$cyl, "test.csv")))
tsm1rwdh

tsm1rwdh2#

您可以将csv写入过程 Package 在一个定制函数中,如下所示:注意,该函数必须返回data.frame,否则将返回错误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(.))
0ve6wy6x

0ve6wy6x3#

下面的工作原理(您可以跳过自定义函数)

library(dplyr)
library(readr)
group_by(mtcars, cyl) %>%
  do(write_csv(., paste0(unique(.$cyl), "test.csv")))
ubbxdtey

ubbxdtey4#

如果您愿意使用data.table,有一种稍微不那么笨拙的方法。

require(data.table)
# Because this is a built in table we have to make a copy first
mtcars <- mtcars 
setDT(mtcars) # convert the data into a data.table

mtcars[, write.csv(.SD, paste0("mtcars_cyl_", .BY, ".csv")), by = cyl]

注意,结果表中没有cyl列(这是多余的,因为它存储在文件名中,但可能出于其他原因而希望保留它)。
如果希望cyl作为列包含在输出中,可以使用

mtcars[, write.csv(c(.BY,.SD), paste0("mtcars_cyl_", .BY, ".csv")), by=cyl]

相关问题