我有一个很大的数据框,其中包含来自多个参与者的数据。每个参与者的数据跨越很多行,我需要将每个参与者的数据保存在单独的文本文件中。正如其他建议(Split dataframe into multiple output files)所述,我正在为此工作使用data.table::fwrite
。但是,这提示了一个信息,我不确定在我的情况下它的解释:
Empty data.table (0 rows) of 1 col: A
我已经搜索了可能的解释,但是觉得这些解释都没有直接解决我的问题(例如,见:unclear error/message: "Empty data.table (0 rows) of 1 col:"; https://github.com/Rdatatable/data.table/issues/3262)。
为说明起见,我生成了一个示例脚本,该脚本本质上相似并且复制了此消息:
# generate data table
DT = data.table(A=c(1,2,1,2,1,2), B=c(1,2,1,1,2,2), C=c(1:6), D=c(20:15))
A B C D
1: 1 1 1 20
2: 2 2 2 19
3: 1 1 3 18
4: 2 1 4 17
5: 1 2 5 16
6: 2 2 6 15
# save data in separate files based on column A
DT[, fwrite(.SD, stringr::str_c("T", unique(A),".csv")), by=.(A)]
这将生成上述消息。但是,将创建两个文件(根据需要)并包含相关数据。
fread("T1.csv")
B C D
1: 1 1 20
2: 1 3 18
3: 2 5 16
fread("T2.csv")
B C D
1: 2 2 19
2: 1 4 17
3: 2 6 15
但是消息提示提示我,脚本中的某些内容不太起作用(我不打算拥有或保存空数据表)。确实是不对劲吗,还是只是错误的消息提示?有趣的是,删除fwrite
时,该消息消失了,向我提示该消息提示已链接到fwrite
:
DT[, .SD, by=.(A)]
1: 1 1 1 20
2: 1 1 3 18
3: 1 2 5 16
4: 2 2 2 19
5: 2 1 4 17
6: 2 2 6 15
任何建议(和解释)将不胜感激。