让我们考虑数据表:
> 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
答案 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"))))