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

Working with weekdays in number format in R lubriday::wday

你们好,SO 可爱的人们,我目前正在使用一个数据集,该数据集包含数字格式的工作日列,对于工作日,数字 1 代表星期一和 7 星期日,初步我正在尝试使用某种可以将此数字转换为 string/text 格式的库,例如,如果我要传递向量 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 结果是 locale-dependent。 Non-English 语言环境将使用 non-English 名称表示工作日等。如果您想要完全可重现的结果,请自己构建 w

w <- c("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")