我在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)
}
非常感谢任何建议或建议。
答案 0 :(得分:4)
使用data.table
和xlsx
,以下方法可以解决问题:
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
在列表上运行正常。