在 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")
你们好,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")