在 R lubriday::wday 中以数字格式处理工作日

问题描述 投票:0回答:1

我目前正在使用一个数据集,其中包含数字格式的工作日列。对于工作日,数字 1 代表星期一和第七个星期日;初步,我试图利用某种可以将这些数字转换为字符串/文本格式的库。例如,如果我要传递向量

days
,我想以文本形式获取天数。

输入:

days<-c(1,3,5,7)

所需输出:

"monday", "wednesday", "friday", "sunday"

当运行这行代码时,我正在使用 R 中的库

lubridate
,我得到:

> wday(days,  week_start = getOption("lubridate.week.start", 1), label = TRUE)
[1] Sun Tue Thu Sat
Levels: Mon < Tue < Wed < Thu < Fri < Sat < Sun

这不是我想要的,因为数字 1 必须是星期一和 7 号星期日,即使我尝试将参数

week_sart
更改为任何数字,我仍然得到星期日而不是星期一,因此所有其他日期都是不正确的。

> wday(days,  week_start = getOption("lubridate.week.start", 7), label = TRUE)
[1] Sun Tue Thu Sat
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat

所以我最终运行了这一行以获得我想要的输出:

wday(days+1,  week_start = getOption("lubridate.week.start", 1), label = TRUE)
[1] Mon Wed Fri Sun
Levels: Mon < Tue < Wed < Thu < Fri < Sat < Sun

但是我真正想要的功能是默认将其设置为 mon ,以防我必须在其他机器上工作。如何正确更改

lubridate::wday
函数的参数以获得所需的输出?

r lubridate
1个回答
4
投票

您可以在没有

lubridate
的情况下高效地完成此操作,使用
days
作为索引向量。

w <- tolower(weekdays(.Date(4:10)))
w
## [1] "monday"    "tuesday"   "wednesday" "thursday"  "friday"    "saturday"  "sunday"

w[days]
## [1] "monday"    "wednesday" "friday"    "sunday" 

如果你想要一个因素,那么你可以做

gl(7L, 1L, labels = w)[days]
## [1] monday    wednesday friday    sunday   
## Levels: monday tuesday wednesday thursday friday saturday sunday

可选择将

ordered = TRUE
传递给
gl

值得一提的是,

weekdays
结果取决于区域设置。非英语语言环境将在工作日等中使用非英语名称。如果您想要完全重现的结果,请自行构建
w

w <- c("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
© www.soinside.com 2019 - 2024. All rights reserved.