【问题标题】:Split aggregated data table into multiple CSV files将聚合数据表拆分为多个 CSV 文件
【发布时间】:2016-01-18 08:49:01
【问题描述】:

我有一个数据表,其中可能包含有关某些特定服务使用情况的数据。该数据描述了不同地区不同服务类型的使用情况:

type     region     quantity     timestamp
small     A            2         05/01/15
small     B            1         05/01/15
big       A            1         05/01/15
small     A            2         06/01/15
small     B            1         06/01/15
big       A            3         06/01/15
...etc

我正在对类型和区域的每个唯一组合的数据序列执行一些操作(这些组合中的每一个都会产生自己的时间序列,因此 small-A 应该独立于 small-B 处理,例如)

我已经想出了如何对这样的聚合数据进行此类操作:

aggregatedDT <- DT[, .(quant = sum(quantity)), by = .(week, region,type)]

现在我需要将每个数据系列保存到单独的 CSV 文件中。我不确定是否有一些内置功能可以执行此类操作,所以我想知道这是否可能。

我想要的输出是:

small-A.csv

week1: total quantity
week2: total quantity
...

small-B.csvbig-A.csv 等也是如此。目前,我将这些数据放在一个汇总的 data.table 中,但是这些 csv 文件是另一种算法的输入,该算法需要一个一个地获取时间序列。

【问题讨论】:

    标签: r csv


    【解决方案1】:

    您可以尝试这样的方法来保持“内部”data.table,同时生成适当的文件名:

    aggregatedDT[,write.csv(.SD,file=sprintf("%s-%s.csv", unique(type),unique(region))),
                 by=.(region,type)]
    

    使用的数据:

    aggregatedDT <- data.table(expand.grid(week=1:2, region=c("A","B"),type=c("big","small")),
                               quant=1:8)
    

    【讨论】:

    • 哇,我不知道我可以使用这样的写入功能。奇迹般有效!谢谢
    • CJ 会比expand.grid 快​​,直接返回data.table。
    • 是的,但它只用于生成数据,所以不确定这是否真的是一个问题。
    • 很好的解决方案。谢谢。但是输出文件没有第一列的名称。你能包括它吗?此外,您可能希望使用fwrite{data.table} 来提高代码速度。
    • 我认为您可以根据自己的情况进行更改,但是这种解决方案显然对 OP 来说已经足够了。
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多