簡體   English   中英

如何創建一個將字符串作為輸入並返回 R 中星期幾的向量的函數?

[英]How to create a function that takes a character string as input and returns a vector of the days of the week in R?

我是 R 的初學者,完全迷失了我的作業。 我想創建一個函數,它接受一個字符串作為輸入並返回一個星期幾的向量。 天數不會返回拼寫錯誤和部分天數的匹配項。 日子也應該井井有條,星期一應該在星期二之前,等等。

樣本輸入:

days.present(mystr = "Dinner on Monday, tuesday, Wed, or Tursday?")
days.present("SundayMonday")
days.present("Are we meeting today?")

輸出應該是這樣的:

[1] "Monday" "Tuesday"
[1] "Sunday" "Monday"
character(0)
vec <- c("Dinner on Monday, tuesday, Wed, or Tursday?",
         "SundayMonday",
         "Are we meeting today?")

# a generic way of finding locale-friendly weekdays
wdays <- weekdays(Sys.Date() + 0:6)
wdays <- paste(wdays, collapse = "|")
wdays
# [1] "Thursday|Friday|Saturday|Sunday|Monday|Tuesday|Wednesday"

lapply(
  regmatches(vec, gregexpr(wdays, vec, ignore.case = TRUE)),
  tools::toTitleCase
)
# [[1]]
# [1] "Monday"  "Tuesday"
# [[2]]
# [1] "Sunday" "Monday"
# [[3]]
# list()

另一種選擇(使用上面的第一days ,長度為 7 的向量)。

wdays <- weekdays(Sys.Date() + 0:6)
lapply(vec, function(v) wdays[sapply(wdays, grepl, x = v, ignore.case = TRUE)])
# [[1]]
# [1] "Monday"  "Tuesday"
# [[2]]
# [1] "Sunday" "Monday"
# [[3]]
# character(0)

# also
lapply(vec, function(v) Filter(function(w) grepl(w, v, ignore.case = TRUE), wdays))

不確定您的講師是否會讓您使用非標准 R 包。 stringr包有一個很酷的函數來提取稱為str_extract_all刺。

mystr1 <- "Dinner on Monday, tuesday, Wed, or Tursday?"
mystr2 <- "SundayMonday"
mystr3 <- "Are we meeting today?"

days.present <- function(mystr) {
  x <- tools::toTitleCase(mystr)
  dow <- c("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
  days <- paste0(dow, collapse="|")
  library(stringr)
  as.character(sort(factor(unique(stringr::str_extract_all(x, days)[[1]]), levels=dow)))
}

days.present(mystr1)
[1] "Monday"  "Tuesday"

days.present(mystr2)
[1] "Sunday" "Monday"

days.present(mystr3)
character(0)

mystr4 <- ("saturday, Saturdays, Friday, thursday, + Wednesday, TueSday, Monday, SundaY")

days.present(mystr4)
[1] "Monday"    "Wednesday" "Thursday"  "Friday"    "Saturday"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM