2017-12-15 13 views
0

データ表の月の名前(Jan、Febなど)のベクトルを数値の等価物(1,2、...)に変換したいと思います。コードrアルファ月を数値に変換する

which(month.abb == month) 

は期待通りに動作します。つまり、which(month.abb == "Feb")は2を返します。しかし、データテーブルで使用されているコードと同じコードでは、警告と、予想外の番号を含むtestベクトルが返されます。

dt <- data.table(month = sort(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) 
dt[, test := which(month.abb == month)] 

答えて

2

この試してみてください:あなたが買ってあげる

dt[, test := match(month, month.abb)] 

を: -

month test 
1: Apr 4 
2: Apr 4 
3: Aug 8 
4: Aug 8 
5: Dec 12 
6: Dec 12 
7: Feb 2 
8: Feb 2 
9: Jan 1 
10: Jan 1 
11: Jul 7 
12: Jul 7 
13: Jun 6 
14: Jun 6 
15: Mar 3 
16: Mar 3 
17: May 5 
18: May 5 
19: Nov 11 
20: Nov 11 
21: Oct 10 
22: Oct 10 
23: Sep 9 
24: Sep 9 
0

ただ、ベクトル化ルックアップテーブルを使用します。

month_trans <- setNames(1:12, month.abb) 

set.seed(2017-11-15) 

month_column <- sample(month.abb, 50, replace=TRUE) 
month_column 
## [1] "Feb" "Mar" "Jan" "Jul" "Oct" "Aug" "Oct" "Aug" "May" "Jan" "Aug" "Apr" "Jan" "May" 
## [15] "May" "Mar" "Dec" "Oct" "Nov" "Nov" "Aug" "Jul" "Mar" "Feb" "Oct" "Feb" "Feb" "Dec" 
## [29] "Dec" "Sep" "Nov" "May" "Jan" "Oct" "Feb" "Oct" "Nov" "Feb" "Mar" "Mar" "Nov" "Jun" 
## [43] "May" "Mar" "Jul" "Nov" "Jul" "Dec" "Oct" "Feb" 

month_trans[month_column] 
## Feb Mar Jan Jul Oct Aug Oct Aug May Jan Aug Apr Jan May May Mar Dec Oct Nov Nov Aug Jul 
## 2 3 1 7 10 8 10 8 5 1 8 4 1 5 5 3 12 10 11 11 8 7 
## Mar Feb Oct Feb Feb Dec Dec Sep Nov May Jan Oct Feb Oct Nov Feb Mar Mar Nov Jun May Mar 
## 3 2 10 2 2 12 12 9 11 5 1 10 2 10 11 2 3 3 11 6 5 3 
## Jul Nov Jul Dec Oct Feb 
## 7 11 7 12 10 2 

unname(month_trans[month_column]) 
## [1] 2 3 1 7 10 8 10 8 5 1 8 4 1 5 5 3 12 10 11 11 8 7 3 2 10 2 2 12 
## [29] 12 9 11 5 1 10 2 10 11 2 3 3 11 6 5 3 7 11 7 12 10 2 
関連する問題