2017-03-29 1 views
3

Comment puis-je obtenir les jours de la semaine et le mois dans ma langue locale?R lubridate: jours de la semaine en langue locale

Mon code:

library(lubridate) 
data <- c("10-02-2015", "11-03-2015") 
data.lubri <- dmy(data) 
wday(data.lubri, label=TRUE) 

retourne toujours

[1] Tues Wed 
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat 

et

month(data.lubri, label = TRUE) 

retourne toujours

[1] Feb Mar 
Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov < Dec 

Je l'ai besoin en portugais, en utilisant lubridate, et déjà essayé une tonne d'options locales, mais rien lubrifiant lié semble fonctionner.

Les fonctions de base, les jours de la semaine() et les mois(), fonctionnent, cependant.

Le problème est base mois() me donne un vecteur non ordonné lorsque vous travaillez avec des dates. J'ai besoin d'eux comme un facteur ordonné, pour le traçage plus tard.

Mon travail actuel est autour de me salir les mains:

factor(months(data.lubri, abbreviate=TRUE), 
      levels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", 
         "Ago", "Set", "Out", "Nov", "Dez"), 
      ordered=TRUE) 


[1] Fev Mar 
Levels: Jan < Fev < Mar < Abr < Mai < Jun < Jul < Ago < Set < Out < Nov < Dez 

mais ce n'est pas chic ...

+0

Créer une table de correspondance des traductions et 'merge()'. – mtoto

+0

Avez-vous une aversion étrange contre les fonctions de base? – Roland

+0

hahahha, non. La chose est: mois de base me renvoie un vecteur non ordonné, tandis que lubrifier mois me renvoie un facteur ordonné. C'est mieux pour le traçage par mois. – erickfis

Répondre

1

@erickfis,

J'ai créé une fonction qui généralise votre approche tous les paramètres régionaux, car j'ai souvent rencontré le même problème:

months2<-function(date){ 
x<-format(ISOdate(1970, 1:12, 1), "%B") 
factor(months(date),ordered=TRUE,levels=x) 
} 
+0

désolé mais je ne pouvais pas le faire fonctionner. 'mois2 (" 10-10-2010 ") ou mois2 (" 2017-10-10 ") me donnera cette erreur: Erreur dans UseMethod (" mois "): ne peut pas être utilisé pour 'mois' aplicado a um objet de classe "character" ' – erickfis

+1

@erickfis, l'argument doit être un objet datetime. Vous pouvez ajouter une ligne à la fonction pour effectuer la conversion avant d'exécuter le reste du code, mais je ne pense pas que ce soit une bonne idée. La meilleure approche devrait être de convertir la chaîne de caractères en datetime avant d'exécuter la fonction, comme vous l'avez fait dans votre exemple: 'data.lubri <- dmy (data)' –

1

Les versions actuelles de lubridate (au moins 1.7.1) permettent ceci par défaut:

wday(x, label = FALSE, abbr = TRUE, 
    week_start = getOption("lubridate.week.start", 7), 
    locale = Sys.getlocale("LC_TIME")) 

Dans les anciennes versions, vous pouvez ajouter simplement des étiquettes à la variable de facteur qui tient vos jours de la semaine (Pays-Bas dans cet exemple):

variable <- factor(variable, levels = c('Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'), labels = c('Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag', 'Zondag'))