如何将更大的数据帧子集化为更小的数据帧,以便将它们写为.csvs?

时间:2018-01-12 12:23:35

标签: r

我试图创建一个基本上将data.frame拆分成几个较小数据帧的函数:

  split_save <- function(df){

    dataframes <- vector("list",length(df))

    dates <- unique(df$date)

    for (i in 1:length(dates)){ 
    dataframes[[i]] <- df[df$date==dates[i],]
    }

    for(i in 1:length(dataframes)){
      write.csv(dataframes[[i]], paste0(i,".csv"))
    }

  }

我的问题是,我无法弄清楚如何将较大的data.frame拆分为较小的数据帧,其中拆分点基于周数,并将其名称写为相应的一周,作为较小的data.frame:

示例数据:

df <- data.frame(date = seq(as.Date('2016-01-04'),as.Date('2018-01-
 12'), by = 1),
       some_data = length(t))


date    some_data

2016-01-04  2
2016-01-05  2
2016-01-06  2
2016-01-07  2
2016-01-08  2
2016-01-09  2
2016-01-10  2
2016-01-11  2
2016-01-12  2
2016-01-13  2
2016-01-14  2
2016-01-15  2
2016-01-16  2
2016-01-17  2

将.csv写入某个目录后所需的输出:

data_for_week1.csv

date    some_data

2016-01-04  2
2016-01-05  2
2016-01-06  2
2016-01-07  2
2016-01-08  2
2016-01-09  2
2016-01-10  2

data_for_week2.csv

   date some_data

   2016-01-11   2
   2016-01-12   2
   2016-01-13   2
   2016-01-14   2
   2016-01-15   2
   2016-01-16   2
   2016-01-17   2

欣赏任何见解!

1 个答案:

答案 0 :(得分:2)

将我的评论转化为答案......

以下是按年度组合分割数据的方法:

dfsplit <- split(df, format(df$date, "%Y-%W"))

然后你可以遍历结果列表的名称并将每个表写入csv文件:

lapply(names(dfsplit), function(x) 
       write.csv(dfsplit[[x]], paste0("dir/data_for_week_", x, ".csv")))