我有一个巨大的数据集,我必须在一段时间内进行分组,并将子集写入新的数据帧。我的问题是在第二天的12PM到12PM之间对数据集进行子集化。
白天的小虚拟子集。
dfrm <- data.frame(a=rnorm(240),dtm=as.POSIXct("2007-03-27 05:00", tz="GMT")+3600*(1:240))
dfrm
## Create list of dates in dfrm
date.start<-format(min(dfrm$dtm),"%Y-%m-%d")
date.end<-format(max(dfrm$dtm),"%Y-%m-%d")
datum<-seq(as.Date(date.start),as.Date(date.end),by="days")
## Get Date and Time from dfrm
dfrm$day<-as.POSIXlt(as.character(dfrm$dtm),format="%Y-%m-%d")
dfrm$clock<-as.POSIXlt(as.character(dfrm$dtm))
dfrm$clock<-format(dfrm$clock,format="%H:%M:%S")
## write dfrm daywise
j<-1
while (j<=length(datum))
{
name <- paste("day", datum[j], sep = "")
assign(name,dfrm[which(dfrm$day==format(datum[j],"%Y-%m-%d")),])
j<-j+1
}
感谢您的帮助。
答案 0 :(得分:0)
你可以做到
dfrm <- data.frame(a=rnorm(240),dtm=as.POSIXct("2007-03-27 05:00")+3600*(1:240));
lst <- split(dfrm, cut(dfrm$dtm, breaks = seq(as.POSIXct(paste0(as.Date(min(dfrm$dtm))-1, " 12:00:00")), as.POSIXct(paste0(as.Date(max(dfrm$dtm))+1, " 12:00:00")), by = "1 day")))
现在,请拿几天的一部分:
lst2 <- lst[as.character(seq(as.POSIXct("2007-04-04 12:00:00"), as.POSIXct("2007-04-06 12:00:00"), "1 day"))]
为每一天创建一个单独的数据框:
list2env(lst2, envir = .GlobalEnv)
head(`2007-04-04 12:00:00`)