当我使用for循环将数据帧作为子集时,如何将数据帧写入csv

时间:2019-05-11 05:23:39

标签: r

使用For循环对数据进行子集处理后,我想自动对每个数据帧进行write.csv。这可能发生在我的for循环中,也可能是一个单独的循环,我只是不知道该怎么做。

我希望每个csv文件也要根据数据框的名称来命名。

for (i in FILENAME$COLUMN) {
  nam <- paste("NEW_FILENAME", i, sep = "_")
  assign(nam, FILENAME[
    FILENAME$COLUMN==i,])
}

我提供的代码将数据作为子集并创建名为
的新数据框
NEW_FILENAME_1
NEW_FILENAME_2
NEW_FILENAME_3


数字更改基于用于对数据进行子集处理的条目。

我需要此功能,因为我的数据集将包含数百个子集。

现在,我该如何在当前的for循环中或使用新的for循环为每个csv编写一个csv。

2 个答案:

答案 0 :(得分:1)

如果只想编写文件,则可以使用tidyverse解决方案。例如,使用mtcars数据集:

library(tidyverse)

mtcars %>%
  group_by(gear, carb) %>%
  do(
    write_csv(., sprintf("new_mtcars_g%s_c%s.csv", .$gear[1], .$carb[1]))
  ) %>% 
  invisible()

答案 1 :(得分:0)

尝试使用apply系列代替split来执行此操作,这将为您拥有的每个唯一COLUMN值创建数据帧列表。因此,您可以创建不同的数据框,也可以仅通过一个命令将它们写入不同的csv文件中。

例如,您可以使用mapply

mapply(function(x, y) 
 write.csv(x, paste0("path_of_file/NEW_FILENAME_", y, ".csv"), row.names = FALSE),
    split(FILENAME, FILENAME$COLUMN), seq_along(unique(FILENAME$COLUMN)))

这适用于mtcars数据集,其中我根据cyl列创建了单独的数据框

mapply(function(x, y) 
   write.csv(x, paste0("NEW_FILENAME_", y, ".csv"), row.names = FALSE), 
      split(mtcars, mtcars$cyl), seq_along(unique(mtcars$cyl)))