R子集按几天之间的时间范围行

时间:2016-11-17 11:26:45

标签: r

我有一个巨大的数据集,我必须在一段时间内进行分组,并将子集写入新的数据帧。我的问题是在第二天的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
}

感谢您的帮助。

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`)