通过对数据框

时间:2017-02-23 00:19:04

标签: r loops subset export-to-csv

我搜索了很多Q& As但尚未找到解决此问题的解决方案......(请参阅下面的尝试)

我有一个交易数据集MAC_trans_sales_members,其中每个交易都分配给一个客户ID,每个客户分配给一个同类群组,例如' 01/2016'在join.cohort列中。有4M客户,因此1个excel文件的行数太多,因此我想为每个连接组创建单独的子集,并将每个子集导出到单独的csv。大约有18个同类群组,所以我想自动化这个子集。

我已尝试过以下几段代码,但它们都不起作用:

尝试1

dt <- MAC_trans_sales_members
setDT(dt)[, fwrite(.SD, paste0("output_", join.cohort,".csv")), 
      by = join.cohort, .SDcols=names(dt) ]

Error: is.character(file) && length(file) == 1 && !is.na(file) is not TRUE

尝试2

setDT(MAC_trans_sales_members)[, write.csv(.SD, paste0("output_", join.cohort,".csv")), 
by = join.cohort, .SDcols=names(MAC_trans_sales_members) ]

Error in file(file, ifelse(append, "a", "w")) : 
invalid 'description' argument
In addition: Warning message:
In if (file == "") file <- stdout() else if (is.character(file)) { :
the condition has length > 1 and only the first element will be used

尝试3

daply(MAC_trans_sales_members, .(join.cohort), write.csv)

...只是在控制台中喷出数据行

我做错了什么?

1 个答案:

答案 0 :(得分:1)

join.cohort是代码中j中的向量。使用unique

MAC_trans_sales_members[, 
    fwrite(.SD, paste0("output_", unique(join.cohort), ".csv")),
    by=join.cohort]

对于您的尝试3,file的{​​{1}}参数未传入。