按多列分组并将每个组写入csv

时间:2017-09-25 19:28:18

标签: r

BRAND ID    FIRST_NAME  CITY
6     1167  Sara        Sarasota
6     1167  Jeffrey     Sarasota
6     1167  Shane       Sarasota
8     1167  Paul        Lakewood Ranch
6     10931 Carol       Grosse Pointe
6     10931 Nick        Detroit
8     10931 William     Grosse Pointe Farms
6     4935  Debra       Lacoochee
6     4935  Mark        Zephyr hills
6     4935  Michael     Zephyr hills

我的.csv文件看起来像上面的表格,其中包含我需要在多个.csv文件中拆分的客户信息。

每个文件都需要按品牌和ID进行拆分。在上面的例子中,将有2个.csv文件,其中(Brand = 6,ID = 1167)有3个客户记录,(Brand = 8,ID = 1167)有1个客户记录。

我需要一些可以检测每个唯一ID的代码的帮助,因为我的数据文件中有30个不同的ID。

1 个答案:

答案 0 :(得分:3)

使用data.table包,我们可以使用以下内容:

按一栏分组:

library(data.table)
setDT(mydat)[, write.csv(c(.BY,.SD), paste0("BRAND_ID_", .BY, ".csv")), by=BRAND]

按两个(或更多)列分组:

对于多列,我可以考虑添加一个帮助列,它是所需列组合的组合:

library(data.table)
setDT(mydat)[, tempcol:=paste(ID,BRAND,sep="_")]
setDT(mydat)[, write.csv(.SD, paste0("ID_BRAND_", .BY, ".csv")),by=tempcol]

这为ID和品牌的每个独特组合提供了5个文件。它们将保存到当前工作目录中。如果您希望将输出放在所需目录中,请阅读?write.csv

<强> 数据

read.table(text='BRAND ID    FIRST_NAME  CITY
                6     1167  Sara        Sarasota
                6     1167  Jeffrey     Sarasota
                6     1167  Shane       Sarasota
                8     1167  Paul        Lakewood_Ranch    
                6     10931 Carol       Grosse_Pointe
                6     10931 Nick        Detroit
                8     10931 William     Grosse_Pointe_Farms
                6     4935  Debra       Lacoochee
                6     4935  Mark        Zephyr_hills
                6     4935  Michael     Zephyr_hills', header=T, quote="") -> mydat