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é?
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"
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
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.
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