我在将datetime变量拆分为两个变量时遇到了一些问题。我的时间序列是一整年(约360天)的/小时/日/月计数。
我想生成一个变量,范围从每个月的第1个月到每个月的第19个变量,第二个变量捕获20到本月剩余的时间:
格式:
datetime hours var1 var2 var3
2011-01-1 00:00:00
2011-01-1 01:00:00
... ...
2011-01-1 23:00:00
2011-01-2 00:00:00
2011-01-2 01:00:00
... ...
2011-01-2 23:00:00
... ...
... ...
2011-01-20 01:00:00
...
2011-01-31 00:00:00
... ...
2011-12-30 00:00:00
2011-12-30 01:00:00
.. ..
所需格式:
datetime1 datetime2 var1 var2 var2
2011-01-1 00:00:00 2011-01-20 00:00:00
2011-01-1 01:00:00 2011-01-21 01:00:00
.. .. .. ..
2011-01-19 00:00:00 2011-01-30 00:00:00
2011-01-19 01:00:00 2011-01-30 01:00:00
.. .. .. ...
.. .. .. ...
2011-12-19 00:00:00 2011-12-30 00:00:00
2011-12-19 01:00:00 2011-12-30 01:00:00
最初,我能够通过以下方式生成日期时间变量:
rbind or rbind.fill ( plyr) two data frames with datetime1 and datetime2
df3<-rbind(df1,df2)
也就是说,原始版本(两个数据框)有这两个变量,但我现在无法分离它们。
我只能制定代码......
答案 0 :(得分:0)
尝试此操作以提取日期的日期:
xx <- as.Date("2014-12-31")
as.POSIXlt(xx)$mday
然后,您可以使用日期作为条件将NA归因于一列,将值归因于另一列。
编辑:这是更深入的版本。
#Setting up a replicable example
mydata <- as.data.frame(matrix(rnorm(90), ncol=3))
names(mydata)[1:2] <- paste0("time",1:2)
mydata$time1 <- as.Date(NA)
mydata$time2 <- as.Date(NA)
str(mydata)
#Getting 30 consecutive days:
datestring <- rep(Sys.time(), 30)
for(i in 1:30)
datestring[i]<- Sys.time() + 60*60*24*i
mydata <- cbind(datestring, mydata)
#Doing what I think you're trying to do:
for (i in 1:dim(mydata)[1]){
if(as.POSIXlt(mydata$datestring[i])$mday <=19)
{mydata$time1[i] <- mydata$datestring[i]}
else {mydata$time2[i] <- mydata$datestring[i]}
}