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

データをDateusingas.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
于 2012-11-04T06:13:12.453 に答える