Подмножество df основано на значении в столбце и извлекается за 30 дней до и после заданной даты - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть фрейм данных, который состоит из столбцов, содержащих дату, Id и фиктивную переменную (аналогично приведенному ниже набору).

Я хотел бы вычесть строки с идентификатором '56', гдеДата 2014-12-03 + 30 дней до и после указанной даты.И то же самое для ID '1998'.

      date     Dummy  ID
1   2014-12-01  1932     56
2   2014-12-02  1828     201
3   2014-12-03  2349     56
4   2014-12-04  8192     100
5   2014-12-05  3188     56
6   2014-12-06  3277     1998

v1 = c(56, 1998)
v2 = c(2014-12-03, 2014-12-06)

Завершая что-то вроде ниже

      date     Dummy  ID
1   2014-12-01  1932     56
3   2014-12-03  2349     56
5   2014-12-05  3188     56
6   2014-12-06  3277     1998

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019
library(data.table)
library(dplyr)

data <- data.table(
  date = seq(as.Date("2014/12/1"), as.Date("2014/12/6"), "days"),
  Dummy = c(1932, 1828, 2349, 8192, 3188, 3277),
  ID = c(56, 201, 56, 100, 56, 1998)
  )


given_date <- as.Date("2014/12/3")

data %>% 
  filter(between(date, given_date - 30, given_date + 30), ID == 56 | ID == 1998)

Выход:

        date Dummy   ID
1 2014-12-01  1932   56
2 2014-12-03  2349   56
3 2014-12-05  3188   56
4 2014-12-06  3277 1998
0 голосов
/ 28 февраля 2019

Один из основных вариантов заключается в том, что вы создаете фрейм данных из ваших условий, присоединяете его к исходному с помощью ID и затем фильтруете:

library(dplyr)

matchdf <- data.frame(ID = c(56, 1998),
                      conditions = c("2014-12-03", "2014-12-06"))

df %>%
  left_join(matchdf, by = "ID") %>%
  mutate_at(vars(date, conditions), list(~ as.Date)) %>%
  filter(date >= conditions - 30 & date <= conditions + 30) %>%
  select(-conditions)

Вывод:

        date Dummy   ID
1 2014-12-01  1932   56
2 2014-12-03  2349   56
3 2014-12-05  3188   56
4 2014-12-06  3277 1998
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...