将日期分为年,月和日的不同列

sbg*_*sbg 8 r date

我有动物园对象,看起来像:

头(OBS)

      Index pp
1932-01-01  0
1932-01-02  0.2
1932-01-03  0
Run Code Online (Sandbox Code Playgroud)

并且我想将索引拆分为3列(分别列中的年,月和日),因此我可以使用每月的每天进行一些分析ddply.

我不知道它是否有任何区别,但我的日期是使用以下方式创建的:

dates <- as.Date(CET[,1], "%d-%m-%Y")
obs <- xts(CET[,2], dates)
Run Code Online (Sandbox Code Playgroud)

其中CET是原始文件,第1列中的日期和第2列中的pp.

谢谢你的帮助!

G. *_*eck 16

1).我们可以使用lubridate的year/ month/ day或节段性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))
Run Code Online (Sandbox Code Playgroud)

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)))
Run Code Online (Sandbox Code Playgroud)

2)聚合.但是,我们并不需要首先创建列.我们可以aggregate.zoo直接使用原始动物园对象,z使用lubridate或chron或仅使用yearmon动物园,具体取决于您想要做什么:

2a)使用润滑剂聚集

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

2c)使用yearmon聚合

如果我们希望总结每年/每月而不是将所有1月份的所有月份,2月份的所有月份等结合在一起,那么我们既不需要chron也不需要rubridate,而是可以使用zoo yearmon:

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

aggregate(z, yearmon, mean)
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 7

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

CET$yr <- sapply(strsplit(dtstr, "-") , "[", 1)
CET$mon <- sapply(strsplit(dtstr, "-") , "[", 2)
CET$dt <- sapply(strsplit(dtstr, "-") , "[", 3)
Run Code Online (Sandbox Code Playgroud)


Man*_*món 5

你可以试试:

CET$year <- format(CET[,1], "%Y") # year
CET$month <- format(CET[,1], "%m") # month
CET$day <- format(CET[,1], "%d") # day
Run Code Online (Sandbox Code Playgroud)

  • 看来你的日期是因素.您可以使用str()函数确保日期实际上是日期. (2认同)