R语言设置法语区域后周起始日不符:能否用setlocale修正?
R中wday函数一周起始日的设置问题
不能仅通过setlocale来修正这个问题,原因和解决方法如下:
核心原因:
wday()(lubridate包)的一周起始日逻辑由函数自身参数控制,和系统区域设置LC_TIME无关。LC_TIME只会影响日期标签的显示语言(比如将英文周日转为法语Dim),但不会改变一周第一天的定义。默认情况下,wday()把周日作为一周的第1天,所以你看到day_number=1对应Dim。正确解决方法:在
wday()中显式指定week_start = 1参数,将周一设为一周的起始日。修改后的代码如下:
Sys.setlocale("LC_TIME", "fr_FR.UTF-8") library(dplyr) library(lubridate) data.frame(day_number=1:7) %>% mutate(day_of_week = wday(day_number, label = TRUE, week_start = 1))
运行这段代码后,day_number=1会对应法语的周一(Lun),符合法国的习惯。
- 全局设置(可选):如果不想每次调用
wday()都传参数,可以通过lubridate::week_start(1)全局设定lubridate包的一周起始日为周一,后续所有相关函数都会遵循这个规则。
内容的提问来源于stack exchange,提问作者leparc
相关产品推荐
相关产品推荐

