我的数据框的两列[比如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)