我有相当大的气象数据集,如下所示:
year month day hour min sec temp RH Rad
我需要将日期转换为一年中的连续日期,例如:
数据存储在数据框中,例如met_dat
,met_dat$year
,met_dat$day
等。
我想根据月份分配yd,即
if met_dat$month==0, /*this is the code for january*/
then
met_dat$yd<-met_dat$day,
else if met_dat$month==1, /*this is the code for february*/
then
met_dat$yd<-met_dat$day+30
else if met_dat$month==2,
then
met_dat$yd<-met_dat$day+58
etc, for the remaining months.
我尝试将ifelse语句嵌套为:
met_dat$yd<-ifelse( (met_dat$month==0),met_dat$yd<-met_dat$day,
(ifelse( (met_dat$month==1), met_dat$yd<-met_dat$day+30,
(ifelse( (met_dat$month==2), met_dat$yd<-met_dat$day+58, NA) )))
我的真实代码有12个月,但有12或3个,这不起作用...它为met_dat $ yd指定了不正确的值,有时接近正确,但永远不会纠正所有月份。
有什么建议吗?
答案 0 :(得分:1)
您可以使用Date
将数据转换为as.Date
,从而将其转换为整数表示形式。然后简单地从每个值中减去一个纪元(参考)日期。像这样:
x <- data.frame(
year = 2012,
month = c("Jan", "Jan", "Feb", "Mar", "Apr", "Apr"),
day = c(1, 2, 1, 1, 1, 2)
)
xx <- with(x, as.Date(paste(year, month, day, sep="-"), format="%Y-%b-%d"))
xx
[1] "2012-01-01" "2012-01-02" "2012-02-01" "2012-03-01" "2012-04-01" "2012-04-02"
xx - as.Date("2012-01-01")
Time differences in days
[1] 0 1 31 60 91 92