我目前正在使用一个数据集,其中包含数字格式的工作日列。对于工作日,数字 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
函数的参数以获得所需的输出?
您可以在没有
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")