Как выбрать строку на основе условий даты другой строки? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть df1:

    State       date fips score    score1 
1 Alabama 2020-03-24    1   242      0 
2 Alabama 2020-03-26    1   538      3
3 Alabama 2020-03-28    1   720      4
4 Alabama 2020-03-21    1   131      0
5 Alabama 2020-03-15    1    23      0 
6 Alabama 2020-03-18    1    51      0
7 Texas   2020-03-14    2    80      0
7 Texas   2020-03-16    2    102     0
7 Texas   2020-03-20    2    702     1
8 Texas   2020-03-23    2    1005    1

Хотелось бы узнать, в какую дату штат превышает оценку 100. Я хотел бы выбрать строку через 7 дней после этой даты? Например, Алабама сдает 100 21 марта, поэтому я хотел бы сохранить данные за 28 марта.

    State       date fips  score    score1 
3 Alabama 2020-03-28    1    720      4
8 Texas   2020-03-23    2    1005     1

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вот решение tidyverse и lubridate.

library(tidyverse)
library(lubridate)

df %>%
  #Convert date column to date format
  mutate_at(vars(date), ymd) %>%
  #Group by State
  group_by(State) %>%
  #Ignore scores under 100
  filter(score > 100) %>%
  #Stay only with the date of the first date with score over 100 + 7 days
  filter(date == min(date) + days(7))
1 голос
/ 05 апреля 2020

Использование подхода by (при условии, что дата + 7 доступна).

res <- do.call(rbind, by(dat, dat$state, function(x) {
  st <- x[x$cases > 100, ]
  st[as.Date(st$date) == as.Date(st$date[1]) + 7, ]
}))
head(res)
#                  date      state fips cases deaths
# Alabama    2020-03-27    Alabama    1   639      4
# Alaska     2020-04-04     Alaska    2   169      3
# Arizona    2020-03-28    Arizona    4   773     15
# Arkansas   2020-03-28   Arkansas    5   409      5
# California 2020-03-15 California    6   478      6
# Colorado   2020-03-21   Colorado    8   475      6  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...