2012-05-31 2 views
2

У меня есть определенное время начала и указанный день недели.Неоднозначный день недели в R

start = as.POSIXct(1234567, origin = "1970-1-1") 
format(start, format = "%A %c") 
target1 = "TUE" 
target2 = "Wednesday" 

Что я хочу, это найти первый день, следующий за стартом, который соответствует соответствующему дню недели. (И, надеюсь, несколько гибко относится к тому, как пользователь может ввести цель недели). Любая идея? Я предполагаю, что таблица поиска строк может работать, но нужно быть более аккуратным.

Бонусные баллы, если решение может быть сделано в vectorise ....

ответ

2

Я не пробовал векторизации это еще (не уверен, если я могу), но вот попытка:

find_day <- function(start,target){ 
    target <- tolower(target) 
    next_week <- as.Date(start) + 1:7 
    next_week[match(target,substr(tolower(weekdays(next_week)),1,nchar(target)))] 
} 

Он должен принимать любую длину или заглавную аббревиатуру дня. Как его использовать:

> find_day(start,"TUE") 
[1] "1970-01-20" 
> find_day(start,"friday") 
[1] "1970-01-16" 
+0

Отлично! Я думаю, что вариант, который обрезает цель с первого по мин (nchar (target)), будет векторизовать. – Fhnuzoag

Смежные вопросы