次のようなデータフレームがあります。
species<-"ABC" ind<-rep(1:4,each=24) hour<-rep(seq(0,23,by=1),4) month<-rep(seq(1,12),8) depth<-runif(length(ind),1,50) df<-data.frame(species,ind,month,hour,depth)
私が望むのは、列月を使用して各季節の間隔を指定し、同じデータフレームから新しい列にそれらの値を返すことです。私はこのコードを季節に使用していましたが、これはうまく機能しているようですが、
# Classify months into seasons summer<-c(1,2,12) fall<-c(3,4,5) winter<-c(6,7,8) spring<-c(9,10,11) # Create a new column with seasons df$season<-NA for(i in 1:nrow(df)){ if(df$month[i]%in%summer){df$season[i]<-"1-summer"} else if(df$month[i]%in%fall){df$season[i]<-"2-fall"} else if(df$month[i]%in%winter){df$season[i]<-"3-winter"} else if(df$month[i]%in%spring){df$season[i]<-"spring"}
}
ただし、このループは、より複雑でより大きなデータベースを備えたより大きなループの内部にすでにあります。だから私はより速く、より効率的なアプローチを探していました。元のデータフレームを切り取ったりサブセット化したりするのではなく、ループを使用している理由は、使用している最初のループが個々の動物を分離して分析を実行しているためです。結果のデータフレームの長さは動物によって異なり、私が抱えていた問題の1つは、すべての動物がすべての月に存在するわけではないことです。そのため、特定の季節に存在しなかった動物にループ内の季節を割り当てようとしたとき、それからRは私にエラーメッセージを与えました...