如何为每个键导出数据表?

时间:2016-12-05 03:23:57

标签: r export data.table fwrite

让我们考虑数据表:

> dt=data.table(v1=1:10, v2=c(rep("a",5),rep("b",5)))
    v1 v2
 1:  1  a
 2:  2  a
 3:  3  a
 4:  4  a
 5:  5  a
 6:  6  b
 7:  7  b
 8:  8  b
 9:  9  b
10: 10  b

如何将dt导出到尽可能多的文件中,而v2命名后面的文件?这意味着一个名为a的文件包含1 2 3 4 5,另一个名为b的文件包含6 7 8 9 10

我试过:dt[, fwrite(.(v1), v2), by=v2]但无济于事。

或者,我如何将dt导出到一个格式如下的单个文件中:

1 2 3 4 5
6 7 8 9 10

3 个答案:

答案 0 :(得分:2)

取自我的其他答案here

dt[, fwrite(.SD, paste0(.BY,".csv")), by=v2, .SDcols="v1"]

如果您按多列分组,只需使用.BY包裹paste(., collapse="_")

答案 1 :(得分:1)

怎么样:

Labels = unique(dt$v2)
for(lab in Labels) {
    FileName = paste("DT_", lab, ".csv", sep="")
    write.csv(dt[dt$v2 == lab, ],  FileName)
}

答案 2 :(得分:1)

我们也可以根据'v2'split将'dt'加入list,然后使用fwrite

lst <- split(dt, dt$v2)
invisible(lapply(names(lst), function(nm) fwrite(lst[[nm]], paste0("DT_", nm, ".csv"))))