2014-02-27 276 views

回答

44

看看month.abb常數。例如,假設你有包括每月的數量,那麼你可以用它做得到月份名稱的三個字母的縮寫整數向量:

> month <- c(12,3,6,2,3,7) 
> month.abb[month] 
[1] "Dec" "Mar" "Jun" "Feb" "Mar" "Jul" 
4

如果英文縮寫是可以接受的, R有一個內置常量month.abb縮寫月份名稱的向量。只需使用您的數字日期來索引縮寫月份名稱的矢量。例如,使用虛擬數據:

set.seed(1) 
df <- data.frame(A = runif(10), Month = sample(12, 10, replace = TRUE)) 

這裏有幾種選擇指數month.abb通過Month

> with(df, month.abb[Month]) 
[1] "Mar" "Mar" "Sep" "May" "Oct" "Jun" "Sep" "Dec" "May" "Oct" 
> df <- transform(df, MonthAbb = month.abb[Month]) 
> df 
      A Month MonthAbb 
1 0.26550866  3  Mar 
2 0.37212390  3  Mar 
3 0.57285336  9  Sep 
4 0.90820779  5  May 
5 0.20168193 10  Oct 
6 0.89838968  6  Jun 
7 0.94467527  9  Sep 
8 0.66079779 12  Dec 
9 0.62911404  5  May 
10 0.06178627 10  Oct 
6

使用lubridate,構建載體從已知的月日起:

測試:對於這些月份的數字,假設Jan = 1:

> m = c(1,2,6,7,9,10,11,12,0,99,NA) 

辦:

> require(lubridate) 
> as.character(month(ymd(010101) + months(m-1),label=TRUE,abbr=TRUE)) 
[1] "Jan" "Feb" "Jun" "Jul" "Sep" "Oct" "Nov" "Dec" "Dec" "Mar" NA 

其中(m-1)是因爲我們從一月份的某個日期開始。

要了解,用於比較:

> cbind(m,as.character(month(ymd(010101) + months(m-1),label=TRUE,abbr=TRUE))) 
     m   
[1,] "1" "Jan" 
[2,] "2" "Feb" 
[3,] "6" "Jun" 
[4,] "7" "Jul" 
[5,] "9" "Sep" 
[6,] "10" "Oct" 
[7,] "11" "Nov" 
[8,] "12" "Dec" 
[9,] "0" "Dec" 
[10,] "99" "Mar" 
[11,] NA NA 

注意它解釋月號作爲MOD-12,從而99名映射到3(99 = 3 +(8 * 12))和NA NA返回。已經發布的一些答案不會這樣做。 -1是自十一月0是十二月

7

如果您需要非標準月份縮寫,然後創建自己一個月的查找向量:

#dummy data 
df <- data.frame(month = c(1,3,5)) 
#months vector assuming 1st month is Jan. 
mymonths <- c("Jan","Feb","Mar", 
       "Apr","May","Jun", 
       "Jul","Aug","Sep", 
       "Oct","Nov","Dec") 
#add abbreviated month name 
df$MonthAbb <- mymonths[ df$month ] 

#result 
df 
# month MonthAbb 
# 1  1  Jan 
# 2  3  Mar 
# 3  5  May 
5

發生變異。

library(dplyr) 
df <- mutate(month = month.abb[month]) 

比變換還快。

df <- system.time(transform(df, month = month.abb[month])) 
df <- system.time(mutate(df, month = month.abb[month])) 
+1

month.abb [month]適合我。謝謝 – andrii

相關問題