如果将日期和月份写成字符,则可以在 dplyr::case_when() 调用中使用正则表达式:
library(dplyr)
df <- df %>%
mutate(
day_of_the_week = case_when(
grepl("mon", date, ignore.case = T) ~ "mon",
grepl("tue", date, ignore.case = T) ~ "tues",
grepl("wed", date, ignore.case = T) ~ "wed",
grepl("thu", date, ignore.case = T) ~ "thurs",
grepl("fri", date, ignore.case = T) ~ "fri",
grepl("sat", date, ignore.case = T) ~ "sat",
grepl("sun", date, ignore.case = T) ~ "sun",
T ~ NA_character_
),
month = case_when(
grepl("jan", date, ignore.case = T) ~ "jan",
grepl("feb", date, ignore.case = T) ~ "feb",
grepl("mar", date, ignore.case = T) ~ "mar",
grepl("apr", date, ignore.case = T) ~ "apr",
grepl("may", date, ignore.case = T) ~ "may",
grepl("jun", date, ignore.case = T) ~ "jun",
grepl("jul", date, ignore.case = T) ~ "jul",
grepl("aug", date, ignore.case = T) ~ "aug",
grepl("sep", date, ignore.case = T) ~ "sep",
grepl("oct", date, ignore.case = T) ~ "oct",
grepl("nov", date, ignore.case = T) ~ "nov",
grepl("dec", date, ignore.case = T) ~ "dec",
T ~ NA_character_
)
)
# dataid date day_of_the_week month
# 1 1 Tue 11/3 tues <NA>
# 2 2 Wed 11/4 wed <NA>
# 3 3 <NA> <NA> <NA>
# 4 4 Monday, February 1, 2016 mon feb
# 5 5 Thursday, March 25, 2015 thurs mar
提取日期/月份数字更难(您可能会以类似的方式对 13 到 31 之间的月份的几天进行操作,但否则无法知道该数字是针对日期还是月份)。
数据
df <- read.table(text = "
dataid date
1 'Tue 11/3'
2 'Wed 11/4'
3 N/A
4 'Monday, February 1, 2016'
5 'Thursday, March 25, 2015'",
header = T,
stringsAsFactors = F,
na.strings = "N/A")