сравнить соседние строки в R - PullRequest
1 голос
/ 23 мая 2019

В моем фрейме данных у меня есть столбец "даты", и я хотел бы, чтобы R прошел через каждую строку дат в цикле, чтобы увидеть, находится ли дата до или после нее в диапазоне 3-14 дней, и еслинет, он индексируется в списке, который будет удален в конце цикла.

, например:

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")

Я бы хотел удалить всю строку, содержащую 2/20/2019, потому что естьникакая другая дата, которая находится в пределах 3-14 дней с этой даты.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 23 мая 2019

Используйте немного order ing и diff ing:

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")
my_dates <- as.Date(my_dates, format="%m/%d/%Y")

o <- order(my_dates)
d <- abs(diff(my_dates[o]))

my_dates[o[ c(Inf,d) <= 14 | c(d,Inf) <= 14 ]]
#[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"
1 голос
/ 23 мая 2019

Вот один путь от outer, данные от thelatemail

s=abs(-outer(my_dates, my_dates, '-'))
my_dates[rowSums(s<=14)>1]
[1] "2019-01-04" "2019-01-18" "2019-04-03" "2019-04-05"
1 голос
/ 23 мая 2019

Вот подробный способ использования lubridate и dplyr.

my_dates <- c( "1/4/2019", "1/18/2019", "4/3/2019", "2/20/2019", "4/5/2019")

library(lubridate); library(dplyr)
df <- data.frame(dates = mdy(my_dates)) %>%
  arrange(dates) %>%
  mutate(days_prior  = dates - lag(dates),
         days_before = lead(dates) - dates) %>%
  mutate(closest_day = pmin(days_prior, days_before, na.rm = T)) %>%
  filter(closest_day <= 14)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...