私はdata.tableを使用しています。「season」という新しい列を作成しようとしています。 .. "MonthName"という列に基づいています。月の日付に基づいてデータテーブルにシーズンカラムを追加する
月の値に基づいてデータテーブルにシーズン列を追加する方が効率的な方法があるかどうかは疑問です。
これは、300,000回の観測のうちの最初の6回です。この表を「dt」とします。私はエラーを取得
rrp totaldemand Year Month Finyear hourminute AvgPriceByTOD MonthName Season
1: 35.27500 1999 1 1999 00:00 33.09037 Jan NA
2: 21.01167 1999 1 1999 00:00 33.09037 Jan Summer
3: 25.28667 1999 2 1999 00:00 33.09037 Feb Summer
4: 18.42334 1999 2 1999 00:00 33.09037 Feb NA
5: 16.67499 1999 2 1999 00:00 33.09037 Feb NA
6: 18.90001 1999 2 1999 00:00 33.09037 Feb Summer
を::
dt[, Season := ifelse(MonthName = c("Jun", "Jul", "Aug"),"Winter", ifelse(MonthName = c("Dec", "Jan", "Feb"), "Summer", ifelse(MonthName = c("Sep", "Oct", "Nov"), "Spring" , ifelse(MonthName = c("Mar", "Apr", "May"), "Autumn", NA))))]
返します
rrp Year Month Finyear hourminute AvgPriceByTOD MonthName
1: 35.27500 1999 1 1999 00:00 33.09037 Jan
2: 21.01167 1999 1 1999 00:00 33.09037 Jan
3: 25.28667 1999 2 1999 00:00 33.09037 Feb
4: 18.42334 1999 2 1999 00:00 33.09037 Feb
5: 16.67499 1999 2 1999 00:00 33.09037 Feb
6: 18.90001 1999 2 1999 00:00 33.09037 Feb
私は、次のコードを試してみました的な理由のために、この一緒に
Warning messages:
1: In MonthName == c("Jun", "Jul", "Aug") :
longer object length is not a multiple of shorter object length
2: In MonthName == c("Dec", "Jan", "Feb") :
longer object length is not a multiple of shorter object length
3: In MonthName == c("Sep", "Oct", "Nov") :
longer object length is not a multiple of shorter object length
4: In MonthName == c("Mar", "Apr", "May") :
longer object length is not a multiple of shorter object length
をそのIわからない、夏のいくつかの月は「夏」は正しく割り当てられますが、他のものはNAが割り当てられます。たとえば、行1と2は両方とも夏でなければなりません。
ありがとうございます!
%Month%%in%c( "Jun"、...) '、not = ' – SymbolixAU
**エラー**ではありません**警告** – SymbolixAU
重複したレベルを作成して削除するのは理想的ではありませんが、通常は数字の月に' cut'を使用します: 'droplevels(cut dt $ Month、breaks = c(0,2,5,8,11,13)、labels = c( 'Winter'、 'Spring'、 'Summer'、 'Autumn'、 'Winter'))) ' – alistaire