【发布时间】:2014-03-30 06:50:12
【问题描述】:
我有一个 csv,其中有一列称为月份作为数字向量。
有什么方法可以将它转换为月份的缩写月份名称?
【问题讨论】:
-
我正在寻找与这些答案所提供的相反...
我有一个 csv,其中有一列称为月份作为数字向量。
有什么方法可以将它转换为月份的缩写月份名称?
【问题讨论】:
A<-array(month.name)
A
[1] "January" "February" "March" "April"
[5] "May" "June" "July" "August"
[9] "September" "October" "November" "December"
U<-list(month=A, num=1:12 )
U
$`month`
[,1] [,2] [,3] [,4]
[1,] "January" "April" "July" "October"
[2,] "February" "May" "August" "November"
[3,] "March" "June" "September" "December"
$num
[1] 1 2 3 4 5 6 7 8 9 10 11 12
DF<-data.frame(U$month, U$num)
DF
X1 X2 X3 X4 U.num
1 January April July October 1
2 February May August November 2
3 March June September December 3
4 January April July October 4
5 February May August November 5
6 March June September December 6
7 January April July October 7
8 February May August November 8
9 March June September December 9
10 January April July October 10
11 February May August November 11
12 March June September December 12
【讨论】:
如果您需要非标准月份缩写,则创建自己的月份查找向量:
#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
【讨论】:
使用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 是 11 月,因为 0 是 12 月。
【讨论】:
看看month.abb 常量。例如,假设您有一个由月份数字组成的整数向量,那么您可以使用它来获取月份名称的三个字母缩写:
> month <- c(12,3,6,2,3,7)
> month.abb[month]
[1] "Dec" "Mar" "Jun" "Feb" "Mar" "Jul"
【讨论】:
factor(month.abb[month],levels=month.abb),使有序因子变量。
如果可以接受英文缩写,R 有一个内置常量month.abb 缩写月份名称的向量。只需使用您的数字日期来索引缩写月份名称的向量。例如,使用虚拟数据:
set.seed(1)
df <- data.frame(A = runif(10), Month = sample(12, 10, replace = TRUE))
这里有几个选项可以通过Month 索引month.abb:
> 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
【讨论】: