r - 如何创建一个将字符串作为输入并返回 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))
推荐阅读
- virtualbox - VirtualBox OS X 上未捕获键盘
- windows - 获取物业指南
- java - 配置为侦听 8080 端口的 Tomcat 连接器启动失败
- ruby-on-rails - Rails:部署heroku应用程序后CSS文件不起作用
- ios - 为什么对象不会附加到数组中?
- java - Java : Jline3 : 超过一个词的自动完成
- javascript - datePicker 在 div 行内使用时不显示
- html - 自定义表格数据宽度html
- python - 为什么 Tkinter 1/4 中的空白图像是我指定的大小?
- batch-file - 循环重命名命令重复 cmd/batch