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



我的数据框的两列[比如col1和col5]包含一周中的几天,例如星期日,星期一,....

我想将这些列转换为它们各自的索引,例如"1"代表">星期日","2"代表"星期一",...等等。 目前,我正在使用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)

我尝试在润滑剂包装中寻找合适的功能,但找不到任何功能。

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

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> 
}

您可以使用 match:

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

您可以使用润滑剂来执行此操作:

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

设置因子的水平会将数字设置为.数字返回。

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)

相关内容

最新更新