2012-07-13 108 views
0

現在我的數據幀像下面創建日期數據的新變量

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個獨立的日子)

我應該爲日期數據做什麼?

+2

請使用'dput'來創建您的數據樣本。並閱讀此:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2012-07-13 14:36:43

+0

「第一列」看起來像rownames或xts /動物園對象的索引。你真的需要提供來自'dput'的輸出,任何人都可以做更多的解決方案。 – 2012-07-13 15:02:19

+0

感謝您的評論!我會投入並嘗試使其工作 – user1489975 2012-07-13 15:47:24

回答

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 
0

zoo對象是不同的一點點地從data.frame的工作。

「第一列」(您提到它)實際上不是列,而是您的對象的index。嘗試index(t.zoo)並查看它返回的結果。這index真的應該有獨特的價值;在你的情況下,有重複的值,這可能會影響你的計算。

轉換爲data.frame可以像下面這樣完成。我已根據t.zooindex添加了單獨的「日期」和「時間」變量。然而

zoo(t.df, order.by=index(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對象(保持新的「日期」和「時間」欄,或者您已經添加任何其他列)可以做到像,這會給你一個警告,因爲你沒有唯一的「order.by」值。