使用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。
答案 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)))