0

次のようなデータフレームがあります。

set.seed(50)
df <- data.frame(Month=c(sort(sample(1:12, 10)),
                         sort(sample(1:12, 10)),
                         sort(sample(1:12, 10))),
                 Year=c(rep(2007, 10), 
                        rep(2010, 10), 
                        rep(2011, 10))) 

の頭df

  Month Year
1     1 2007
2     3 2007
3     4 2007
4     5 2007
5     6 2007
6     7 2007

季節に応じて年変数を再コーディングする必要があります。たとえば、月が1月で、年が2013の場合、年は2012/2013に再コーディングする必要があります。1月から6月の場合、年は2012/2013に再コード化され、7月から12月の年は2013/2014に再コード化される必要があります。

dfしたがって、以下のように再コーディングする必要があります。いくつかの月が欠落していて、いくつかの年が欠落していることに注意してください。

set.seed(50)
df <- data.frame(Month=c(sort(sample(1:12, 10)),
                         sort(sample(1:12, 10)),
                         sort(sample(1:12, 10))),
                 Year=c(rep(2007, 10), 
                        rep(2010, 10), 
                        rep(2011, 10)),                   
                 Year.Seasonal=c(rep('2006/2007', 5),
                                 rep('2007/2008', 5),
                                 rep('2009/2010', 6),
                                 rep('2010/2011', 9),
                                 rep('2011/2012', 5)))

再コーディングの責任者df

  Month Year Year.Seasonal
1     1 2007     2006/2007
2     3 2007     2006/2007
3     4 2007     2006/2007
4     5 2007     2006/2007
5     6 2007     2006/2007
6     7 2007     2007/2008

これを行うための最良の方法は何ですか?

4

2 に答える 2

4
df <- within(df,season <- paste(Year - (Month <= 6),
                                Year + (Month > 6),sep="/"))
head(df)
  Month Year    season
1     1 2007 2006/2007
2     3 2007 2006/2007
3     4 2007 2006/2007
4     5 2007 2006/2007
5     6 2007 2006/2007
6     7 2007 2007/2008
于 2013-03-16T17:34:55.117 に答える
2

これが使用するソリューションです-7未満のifelse()場合は前のシーズンになり、そうでない場合は次のシーズンになります。Month機能paste()は年を重ねるでしょう。

df$Year.Seasonal<-ifelse(df$Month<7,
     paste(df$Year-1,df$Year,sep="/"),paste(df$Year,df$Year+1,sep="/"))

> head(df)
  Month Year Year.Seasonal
1     1 2007     2006/2007
2     3 2007     2006/2007
3     4 2007     2006/2007
4     5 2007     2006/2007
5     6 2007     2006/2007
6     7 2007     2007/2008
于 2013-03-16T17:29:50.237 に答える