1

我有相当大的气象数据集,看起来像:

year  month day hour min sec temp RH Rad 

我需要将这一天转换为一年中的连续一天,例如:

  • 1 月 1 日是第 0 天
  • 2 月 1 日是第 31 天
  • 3 月 1 日是第 59 天(非闰年)
  • 4月1日是90,等等。

数据存储在数据框中,例如, met_dat等。met_dat$yearmet_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 分配了不正确的值,有时接近正确,但在所有月份都不会正确。

有什么建议么?

4

1 回答 1

1

You can convert your data to Date using as.Date, thus turning it into an integer representation. Then simply subtract an epoch (reference) date from each value. Like this:

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
于 2012-11-04T06:13:12.453 回答