[英]r convert alpha month to numeric
我想將數據表中月份名稱(一月,二月等)的向量轉換為它們的數字等效項(1、2,...)。 編碼
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)]
嘗試這個:
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
只需使用向量化查找表:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.