【问题标题】:R lubridate: weekdays in local languageR lubridate:当地语言的工作日
【发布时间】:2017-03-29 17:14:17
【问题描述】:

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

我的代码:

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,并且已经尝试了大量的语言环境选项,但似乎没有任何与 lubridate 相关的工作。

不过,基本函数 weekdays() 和 months() 可以工作。

问题是 basemonth() 在处理日期时给了我一个无序的向量。

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

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

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

但这并不优雅......

【问题讨论】:

  • 创建翻译和merge()的查找表。
  • 你对基函数有什么奇怪的反感吗?
  • 哈哈哈,不。问题是:基准月份返回给我一个无序向量,而 lubridate 月份返回给我一个有序因子。它更适合按月绘制。
  • 您可以轻松地将您的方法封装在一个函数中。

标签: r locale lubridate


【解决方案1】:

当前版本的 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'))

【讨论】:

    【解决方案2】:

    @erickfis,

    我创建了一个函数,可以将您的方法推广到任何语言环境,因为我经常遇到同样的问题:

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

    【讨论】:

    • 抱歉,我无法运行它。 months2("10-10-2010") or months2("2017-10-10") will give me this error: Error in UseMethod("months") : método não aplicável para 'months' aplicado a um objeto de classe "character"
    • @erickfis,参数必须是日期时间对象。您可以在函数中添加一行以在运行其余代码之前进行转换,但我认为这不是一个好主意。最好的方法应该是在运行函数之前将字符串转换为日期时间,就像您在示例中所做的那样:data.lubri &lt;- dmy(data)
    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2013-06-06
    相关资源
    最近更新 更多