按单列分组时用.SD和fwrite生成的空data.table消息

时间:2019-01-24 00:30:36

标签: r data.table

我有一个很大的数据框,其中包含来自多个参与者的数据。每个参与者的数据跨越很多行,我需要将每个参与者的数据保存在单独的文本文件中。正如其他建议(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 

任何建议(和解释)将不胜感激。

0 个答案:

没有答案