是否有任何 R 函数可用于查找星期几的索引,例如星期日为 1,星期一为 2,等等?

Is there any R function for finding index of days of week, e.g., 1 for Sunday, 2 for Monday, & so on?

我的数据框的两列 [比如 col1 和 col5] 包含星期几,例如星期日、星期一……

我想将这些列转换为它们各自的索引,例如 '1' 表示“星期日”,'2' 表示 'Monday', 。 ..等等。 目前,我正在使用 ifelse,但我相信在 R 中可能有 一种有效的方法来做同样的事情。

示例代码:

df$col1 = ifelse(df$col1=="Sunday",1,df$col1)
df$col1 = ifelse(df$col1=="Monday",2,df$col1)
....
df$col1 = ifelse(df$col1=="Saturday",7,df$col1)

col5 的类似代码

df$col5 = ifelse(df$col5=="Sunday",1,df$col5)
df$col5 = ifelse(df$col5=="Monday",2,df$col5)
....
df$col5 = ifelse(df$col5=="Saturday",7,df$col5)

我试图在 lubridate 包中寻找合适的功能,但找不到。

您可以使用匹配:

dow <- c('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
df$col1 <- match(df$col1, dow)

比匹配更简单的是我们可以称之为 "lookup table",或者这里只是一个命名向量:

R> dow <- 1:7 
R> names(dow) <- c("Sunday", "Monday", "Tuesday", "Wednesday", 
                   "Thursday",  "Friday", "Saturday")
R> dow["Thursday"]
Thursday
       5
R> unname(dow["Thursday"])    # if you want to drop the name
[1] 5
R> 

您可以通过 switch 语句以编程方式执行相同的操作。

编辑: 根据要求。

## switch
dow <- function(d) {
    switch(d,
    Sunday    = 1,
    Monday    = 2,
    Tuesday   = 3,
    Wednesday = 4,
    Thursday  = 5,
    Friday    = 6,
    Saturday  = 7)
使用示例
R> dow("Monday")
[1] 2
R> dow("Friday")
[1] 6
R> 
}

设置一个因素的水平设置数字 as.numeric returns。

df= data.frame(col1 = c("Friday", "Monday", "Wednesday"), col5 = c("Tuesday", "Saturday", "Monday"))
df$col1 = factor(df$col1, levels=c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
df$col1 = as.numeric(df$col1)
df$col5 = factor(df$col5, levels=c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
df$col5 = as.numeric(df$col5)

您可以使用 lubridate 来执行此操作:

lubridate::wday(lubridate::today(),
                week_start = 1,
                label = TRUE)
[1] Fr
Levels: Mo < Di < Mi < Do < Fr < Sa < So