web-dev-qa-db-fra.com

Convertir un mois numérique en abréviation d'un mois

J'ai un CSV avec une colonne appelée mois en tant que vecteur numérique.

Est-il possible de convertir cela en un nom de mois abrégé?

41
user3358686

Regardez le month.abb constant. Par exemple, supposons que vous avez un vecteur d’entiers composé du nombre du mois, puis vous pouvez l’utiliser pour obtenir l’abréviation en trois lettres du nom du mois en faisant:

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

Si vous avez besoin d'une abréviation mensuelle non standard, créez votre propre vecteur de recherche par mois:

#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
11
zx8754

Utilisez lubrifier, construisez un vecteur à partir d'un jour de mois connu:

Test: pour ces numéros de mois, supposons que Jan = 1:

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

faire:

> 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   

où le (m-1) c'est parce que nous partons d'une date en janvier.

Pour voir comment cela se compare:

> 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   

Notez qu'il interprète les nombres de mois comme mod-12, de sorte que 99 mappe sur 3 (99 = 3 + (8 * 12)) et NA renvoie NA. Certaines des réponses déjà publiées ne le feront pas. -1 est novembre puisque 0 est déc.

9
Spacedman

Si les abréviations en anglais sont acceptables, R a une constante intégrée month.abb vecteur des noms de mois abrégés. Utilisez simplement votre date numérique pour indexer ce vecteur de noms abrégés de mois. Par exemple, en utilisant des données factices:

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

voici plusieurs options pour indexer month.abb via 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
Gavin Simpson