R lubridate:平日用当地语言

时间:2017-03-29 17:14:18

标签: r locale lubridate

如何以当地语言获取工作日和月份?

我的代码:

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

始终返回

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

month(data.lubri, label = TRUE)

始终返回

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

我需要用葡萄牙语,使用lubridate,并且已经尝试了大量的语言环境选项,但没有任何相关的润滑剂似乎有效。

虽然基本功能,工作日()和月()工作。

问题是基数月()在处理日期时给我一个无序向量。

我需要它们作为有序因子,以便以后绘图。

我目前的工作是弄脏我的手:

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

但这不是优雅的......

2 个答案:

答案 0 :(得分:2)

当前版本的lubridate(至少1.7.1)默认允许这样做:

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

在旧版本中,您只需将标签添加到保存工作日的因子变量(本例中为荷兰语):

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

答案 1 :(得分:1)

@erickfis,

我创建了一个功能,可以概括您对任何语言环境的处理方法,因为我经常遇到同样的问题:

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