如何编写为data.frame中的每个唯一ID写入多个excel文件的函数?

时间:2015-12-02 01:56:42

标签: r data.table

我在Windows 7上使用R 3.2.2。

我是R的新手,我想知道如何创建一个写入excel文件数量的函数,即。对于具有所需日期范围的每个唯一ID。 以下是文本中原始数据的快照。

ID,Type,PostCode,Date

15,SS,2520,2015-11-01

15,SS,2520,2015-10-01

20,SS,2520,2015-11-20

16,SS,2520,2015-11-12

16,SS,2520,2015-10-25

11,SS,2520,2015-10-14

20,SS,2520,2015-11-30

数据可以有100多个个人ID,行数超过10万。 我想要做的是创建读取原始数据的函数,并在每个ID的所需日期范围内使用数据表编写单独的excel文件,理想情况下使用ID号的文件名。

我觉得可能需要循环,但我的想象力非常有限,我无法找出使这成为可能的原因。

到目前为止我所做的一切都在下面。(对不起,这只是乞讨)

myfunction <- function(startdate,enddate) {
x <- read.table("aaa.text", sep = ",")
split(x,x$ID)
}

非常感谢任何建议或建议。

1 个答案:

答案 0 :(得分:4)

使用data.tablexlsx,以下方法可以解决问题:

library(data.table)
library(xlsx)
setDT(x)
x[ , write.xlsx(.SD, file = paste0(.BY[[1]], ".xlsx")), by = Date]

从那里,它是钟声和口哨。

您会注意到这会打印一列行名称 - write.xlsx可以选择将其关闭(row.names = FALSE)。

如果你想在你的输出中包含Date作为一个列,它会更加模糊不清(让Frank清理它的道具):

x[ , write.xlsx(c(.BY, .SD), file = paste0(.BY[[1]], ".xlsx")), by = Date]

基本上,因为.SD.BY都是list s,c只是连接,显然write.xlsx在列表上运行正常。