将数字月份转换为月份缩写

use*_*686 42 r date

我有一个名为month的列作为数字向量的csv.

有没有办法将其转换为月份的缩写月份名称?

Jil*_*ina 74

看看month.abb常数.例如,假设您有一个由月份数组成的整数向量,那么您可以通过执行以下操作来使用它来获取月份名称的三个字母缩写:

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

  • 作为额外的赏金,这个位:`factor(month.abb[month],levels=month.abb)`,创建一个有序的因子变量。 (5认同)

zx8*_*754 11

如果您需要非标准月份缩写,则创建自己的月份查找向量:

#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
Run Code Online (Sandbox Code Playgroud)


Spa*_*man 9

使用lubridate,从已知的月份日开始构建向量:

测试:对于这些月份数字,假设Jan = 1:

> m = c(1,2,6,7,9,10,11,12,0,99,NA)
Run Code Online (Sandbox Code Playgroud)

做:

> 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   
Run Code Online (Sandbox Code Playgroud)

其中,(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   
Run Code Online (Sandbox Code Playgroud)

请注意,它将月份数字解释为mod-12,因此99映射到3(99 = 3 +(8*12)),NA返回NA.已发布的一些答案不会这样做.-1是11月,因为0是12月.


Rei*_*son 6

如果可以接受英语缩写,则R具有一个内置month.abb的缩写月份名称的常数向量。只需使用您的数字日期为该月份的缩写向量建立索引。例如,使用伪数据:

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

这是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
Run Code Online (Sandbox Code Playgroud)