从日期数据创建新变量

时间:2012-07-13 14:34:11

标签: r date

现在我的数据框如下所示

  

dput(头(t.zoo))

structure(c(85.92, 85.85, 85.83, 85.83, 85.85, 85.87, 1300, 1300, 
1299.75, 1299.75, 1299.75, 1300), .Dim = c(6L, 2L), .Dimnames = list(
NULL, c("cl", "es")), index = structure(list(sec = c(0.400000095367432, 
0.900000095367432, 1.40000009536743, 1.90000009536743, 2.40000009536743, 
2.90000009536743), min = c(30L, 30L, 30L, 30L, 30L, 30L), hour = c(10L, 
10L, 10L, 10L, 10L, 10L), mday = c(6L, 6L, 6L, 6L, 6L, 6L), mon = c(5L, 
5L, 5L, 5L, 5L, 5L), year = c(112L, 112L, 112L, 112L, 112L, 112L
), wday = c(3L, 3L, 3L, 3L, 3L, 3L), yday = c(157L, 157L, 157L, 
157L, 157L, 157L), isdst = c(1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst"
), class = c("POSIXlt", "POSIXt"), tzone = c("", "EST", "EDT"
)), class = "zoo")

我有两个问题,第一个是我想为第一列添加变量名称,第二个是我想创建一个分类变量来帮助我指示2010-06-06(因为有3个单独的日子)< / p>

我应该为日期数据做些什么?

2 个答案:

答案 0 :(得分:0)

我不熟悉zoo类,所以下面的代码不好看,但看起来很有用。

yourdata<-as.matrix(yourdata)  
justdate <- substr(rownames(yourdata), 1, 10)
justtime <- substr(rownames(yourdata), 11, 19)  
row.names(yourdata) <- NULL  
yourdata<-as.data.frame(yourdata)  
yourdata[,"justdate"]<-justdate  
yourdata[,"justtime"]<-justtime  
yourdata[yourdata$justdate=="2012-06-06","newvariable"]<-1  
> yourdata  
  cl      es   justdate  justtime newvariable  
1 85.92 1300.00 2012-06-06  10:30:00           1  
2 85.85 1300.00 2012-06-06  10:30:00           1  
3 85.83 1299.75 2012-06-06  10:30:01           1  
4 85.83 1299.75 2012-06-06  10:30:01           1  
5 85.85 1299.75 2012-06-06  10:30:02           1  
6 85.87 1300.00 2012-06-06  10:30:02           1  

答案 1 :(得分:0)

zoo开始,

data.frame个对象有点不同。

&#34;第一栏&#34; (正如你所提到的)实际上不是一列,而是你对象的index。试试index(t.zoo)并查看它返回的内容。这个index确实应该有唯一的值;在您的情况下,有重复的值,这可能会影响您的计算。

可以像下面那样转换为data.frame。我已经添加了单独的&#34;日期&#34;和&#34;时间&#34;变量基于index的{​​{1}}。

t.zoo

转换回require(zoo) # Load the `zoo` package if you haven't already done so t.df = data.frame(Date = format(index(t.zoo), "%Y-%m-%d"), Time = format(index(t.zoo), "%H:%M:%S"), data.frame(t.zoo)) t.df # Date Time cl es # 1 2012-06-06 10:30:00 85.92 1300.00 # 2 2012-06-06 10:30:00 85.85 1300.00 # 3 2012-06-06 10:30:01 85.83 1299.75 # 4 2012-06-06 10:30:01 85.83 1299.75 # 5 2012-06-06 10:30:02 85.85 1299.75 # 6 2012-06-06 10:30:02 85.87 1300.00 对象(保留新的&#34;日期&#34;和&#34;时间&#34;列,或者您添加的任何其他列)可以像下面这样完成:

zoo

但请注意,这会给您一个警告,因为您没有唯一的&#34; order.by&#34;值。