我有动物园对象,如:
头(OBS)
Index pp
1932-01-01 0
1932-01-02 0.2
1932-01-03 0
我希望将索引拆分为3列(单独列中的年,月和日),以便我可以使用ddply
每月进行一些分析。
我不知道它是否有任何区别,但我的日期是使用以下方式创建的:
dates <- as.Date(CET[,1], "%d-%m-%Y")
obs <- xts(CET[,2], dates)
其中CET是原始文件,第1列中的日期和第2列中的pp。
感谢您的帮助!
答案 0 :(得分:16)
1)列。我们可以使用lubridate的year
/ month
/ day
或chron的month.day.year
:
1a)列通过lubridate
library(zoo)
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999)
library(lubridate)
tt <- time(z)
zz <- cbind(z, year = year(tt), month = month(tt), day = day(tt))
1b)列通过chron
library(zoo)
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999)
library(chron)
zz <- with(month.day.year(time(z)), zoo(cbind(z, day, month, year)))
2)汇总。但是,我们并不需要首先创建列。我们可以直接使用aggregate.zoo
使用原始动物园对象z
,使用lubridate或chron,或者只使用动物园中的yearmon
,具体取决于您想要做什么:
2a)使用lubridate进行聚合
library(zoo)
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999)
library(lubridate)
aggregate(z, day, mean)
aggregate(z, month, mean)
aggregate(z, year, mean)
2b)使用chron聚合
library(zoo)
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999)
library(chron)
mdy <- month.day.year(time(z))
aggregate(z, mdy$day, mean)
aggregate(z, mdy$month, mean)
aggregate(z, mdy$year, mean)
# or
ct <- as.chron(time(z))
aggregate(z, days(ct), mean)
aggregate(z, months(ct), mean)
aggregate(z, years(ct), mean)
# days(ct) and years(ct) can actually
# be shortened to just days and years within the above context
# (and that would work for months too except they would be out of order)
aggregate(z, days, mean)
aggregate(z, years, mean)
2c)使用yearmon聚合
如果我们希望总结每年/每月,而不是将所有一月份的所有月份,所有二月份一起等等,那么我们既不需要chron也不需要rubridate,而是可以使用zoo yearmon
:
library(zoo)
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999)
aggregate(z, yearmon, mean)
答案 1 :(得分:7)
dtstr <- as.character( index(CET))
CET$yr <- sapply(strsplit(dtstr, "-") , "[", 1)
CET$mon <- sapply(strsplit(dtstr, "-") , "[", 2)
CET$dt <- sapply(strsplit(dtstr, "-") , "[", 3)
答案 2 :(得分:5)
您可以尝试:
CET$year <- format(CET[,1], "%Y") # year
CET$month <- format(CET[,1], "%m") # month
CET$day <- format(CET[,1], "%d") # day
答案 3 :(得分:2)
require(lubridate)
maindata1 <- cbind(maindata1, day=day(maindata1$Date), month=month(maindata1$date), year=year(maindata1$date))