2015-03-10 10 views

Odpowiedz

9

myślę, że to powinno działać:

library(lubridate) 

Sys.Date() - wday(Sys.Date() + 1) 
1

ostatni piątek było 4 dni temu, a więc:

Sys.Date()-4 

> Sys.Date()-4 
[1] "2015-03-06" 

OR dla każdego dnia tygodnia, używanie base:

Sys.Date()-(as.POSIXlt(Sys.Date())$wday+2) 
+1

Oczekuję, że PO będzie chciał pracować dłużej niż we wtorki. – CephBirk

+1

Chociaż może to być prawda, nie została określona. Dodałem rozwiązanie przy użyciu 'base'. –

5

Oto funkcja, która znajdzie ostatnią datę dla każdego dnia tygodnia:

getlastdate <- function(day) { 
library(lubridate) 
dates <- seq((Sys.Date()-7), (Sys.Date()-1), by="days") 
dates[wday(dates, label=T)==day] 
} 

getlastdate("Mon") 

# "2015-03-09" 

wprowadzić dzień tygodnia w formie skróconej: tj

Sun Mon Tues Wed Thurs Fri Sat 
10

Spróbuj tego:

library(zoo) 
lastfri(Sys.Date()) 

gdzie lastfri jest tym samym, co funkcja linii jednoliniowej nextfri w tej winiecie zoo, zoo quickref vignette, z wyjątkiem tego ceiling zostaje zastąpione przez floor. Zauważ, że lastfri jest wektoryzowany, tzn. Może przyjmować wektor dat wejściowych i generuje wektor dat wyjściowych. Na przykład,

library(zoo) 
Sys.Date() 
## 2015-03-10 
lastfri(Sys.Date() + 0:6) 
## [1] "2015-03-06" "2015-03-06" "2015-03-06" "2015-03-13" "2015-03-13" 
## [6] "2015-03-13" "2015-03-13" 

Zatem ostatni piątek był 06. marca i trzymamy się 6 marca do dnia przesuwa się na następny piątek w tym momencie ostatni piątek jest 13 marca.

Na stronie: Następny piątek to piątek 13.

+0

Zdecydowanie nie oczekiwałem, że będzie do tego gotowa funkcja. Chłodny. –

Powiązane problemy