【问题标题】:Convert a numeric month to a month abbreviation将数字月份转换为月份缩写
【发布时间】:2014-03-30 06:50:12
【问题描述】:

我有一个 csv,其中有一列称为月份作为数字向量。

有什么方法可以将它转换为月份的缩写月份名称?

【问题讨论】:

  • 我正在寻找与这些答案所提供的相反...

标签: r date


【解决方案1】:
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

【讨论】:

    【解决方案2】:

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

    #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
    

    【讨论】:

      【解决方案3】:

      使用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 月。

      【讨论】:

        【解决方案4】:

        看看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),使有序因子变量。
        【解决方案5】:

        如果可以接受英文缩写,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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多