Подмножество кадра данных при условии минимальной разницы между двумя датами - PullRequest
0 голосов
/ 12 октября 2019

У меня есть фрейм данных с 4 переменными: id, измерение, date_a, date_b.

Один идентификатор может вносить вклад в df более одного раза. Я хочу поднастроить этот фрейм данных, чтобы включить только одно измерение для каждого идентификатора. Я хочу выбрать одну строку для каждого идентификатора на основе минимальной разницы между date_b и date_a, однако эта минимальная разница должна составлять не менее одного года. Есть ли способ сделать это, используя dplyr, используя одну строку кода, вместо создания новой переменной для разницы в датах?

1 Ответ

2 голосов
/ 12 октября 2019

Вот некоторые фальшивые данные. (Рекомендуется включать что-то подобное в ваш вопрос, чтобы избежать двусмысленности или недопонимания вашей конкретной ситуации.)

set.seed(8601)
df <- data.frame(
  id = rep(1:3, each = 5),
  measurement = "foo",
  date_a = as.Date(sample(1:3000, 15), origin = "2010-01-01")
)
df$date_b <- df$date_a + sample(1:1000, 15)

Вот немного более длинный, чем одна строка подход с dplyr:

library(dplyr)
df %>% group_by(id) %>% filter(date_b-date_a >= 365) %>% filter(date_b-date_a == min(date_b-date_a))

Результат:

# A tibble: 3 x 4
# Groups:   id [3]
     id measurement date_a     date_b    
  <int> <fct>       <date>     <date>    
1     1 foo         2013-06-13 2014-11-26
2     2 foo         2014-10-05 2017-04-14
3     3 foo         2012-01-07 2014-02-11
...