0

现在我的数据框如下

输入(头部(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 个不同的日子)

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

4

2 回答 2

0

zoodata.frame使用 from s 的对象有点不同。

“第一列”(如您所指)实际上不是一列,而是index您的对象的列。试试看index(t.zoo)它返回什么。这index确实应该具有独特的价值;在您的情况下,存在重复的值,这可能会影响您的计算。

转换为 adata.frame可以如下进行。我基于indexfrom添加了单独的“日期”和“时间”变量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

转换回zoo对象(保留新的“日期”和“时间”列,或您添加的任何其他列)可以这样完成:

zoo(t.df, order.by=index(t.zoo))

但是请注意,这会给您一个警告,因为您没有唯一的“order.by”值。

于 2012-07-14T11:09:44.277 回答
0

我不熟悉动物园类,所以下面的代码不是很好,但似乎工作。

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  
于 2012-07-13T17:17:16.027 回答