2011-07-01 77 views
8

不同列我有一个看起来像动物园的对象:拆分日期为年,月和

头(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

谢谢帮助!

回答

16

1)。我们可以使用lubridate的year/month/day或节段性month.day.year

1A)通过代上通过lubridate

​​

1B)

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或克隆氏病或取决于它是什么,你想要做的只是用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)中骨料使用克隆氏病

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

如果我们希望每年/月均月月总结,而不是结块所有一月月在一起,在一起,等于是我们既不需要代上也不lubridate而是可以使用动物园的yearmon

library(zoo) 
z <- zoo(1:1000, as.Date("1932-01-01") + 0:999) 

aggregate(z, yearmon, mean) 
5

你可以试试:

CET$year <- format(CET[,1], "%Y") # year 
CET$month <- format(CET[,1], "%m") # month 
CET$day <- format(CET[,1], "%d") # day 
+1

感谢,但它不工作:'错误format.default(结构(as.character(X),名称=名称(X),昏暗朦胧=(X): 无效 '修剪'参数' – sbg

+2

看起来你的日期是因素。你可以使用str()函数来确保你的日期实际上是日期。 –

7
dtstr <- as.character(index(CET)) 

CET$yr <- sapply(strsplit(dtstr, "-") , "[", 1) 
CET$mon <- sapply(strsplit(dtstr, "-") , "[", 2) 
CET$dt <- sapply(strsplit(dtstr, "-") , "[", 3) 
+0

谢谢德文,索引(CET)'不起作用('错误:找不到函数“索引”',但改为'dtstr < - as.character(CET [,1])',工作! – sbg

+1

很高兴有你需要的地方。注意:函数拼写为'index',而不是'Index' –

2
require(lubridate) 
maindata1 <- cbind(maindata1, day=day(maindata1$Date), month=month(maindata1$date), year=year(maindata1$date)) 
+1

请添加一些关于代码的说明,而不仅仅是代码转储。 –