Подмножество кадра данных с динамическими c датами по диапазону дат в R - PullRequest
0 голосов
/ 28 января 2020

У меня есть приведенный ниже кадр данных:

dates <- data.frame(rep(
  seq(as.Date('2017-01-01'), as.Date('2017-12-31'), by = 'days'), 
  times = 1))
colnames(dates)<-"day"

И я хотел бы установить его на последние 2 недели. Дело в том, что я не хочу использовать что-то вроде:

dates[day>="2017-18-02" & day<="2017-05-02"]

, потому что кадр данных будет обновляться со временем, а последняя дата будет меняться.

Ответы [ 3 ]

1 голос
/ 28 января 2020

Возможное решение с lubridate и dplyr

library(lubridate)
library(dplyr)

testset %>%
filter(week(testset$date) == max(week(testset$date)))
0 голосов
/ 28 января 2020

Вы можете создать столбец Week из date и фильтр для max(Week)

    library(data.table)
    #> Warning: package 'data.table' was built under R version 3.6.2

    testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04",
                                     "2013-10-05","2013-11-06")), 
                      yr = c(2013,2013,2013,2013,2013), 
                      mo = c(07,08,09,10,11),
                      da = c(02,03,04,05,06), 
                      plant = LETTERS[1:5], 
                      product = as.factor(letters[26:22]), 
                      rating = runif(25))

    testset$Week <- format(testset$date, "%W")

    testset[Week == max(Week)]
    #>          date   yr mo da plant product    rating Week
    #> 1: 2013-11-06 2013 11  6     E       v 0.7794414   44
    #> 2: 2013-11-06 2013 11  6     E       v 0.4971975   44
    #> 3: 2013-11-06 2013 11  6     E       v 0.6272580   44
    #> 4: 2013-11-06 2013 11  6     E       v 0.3748460   44
    #> 5: 2013-11-06 2013 11  6     E       v 0.6683196   44

0 голосов
/ 28 января 2020

Мы можем извлечь неделю и создать логический вектор

testset[testset[, {i1 <- as.numeric(format(date, "%W")); .I[i1 == max(i1)]}]]

Если это более одной недели

testset[testset[, {i1 <- as.numeric(format(date, "%W"))
                   .I[i1 %in% tail(unique(sort(i1)), 2)] }]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...