Как сопоставить значение на основе временного диапазона из другой таблицы? - PullRequest
1 голос
/ 06 марта 2019

У меня есть две таблицы следующим образом:

table_A

x | date

1   03/06
1   03/15
2   12/04
3   06/23
3   10/05

table_B

x | y | start_date | end_date

1   a    03/02       03/08
1   b    03/09       03/20
1   c    03/21       12/30
2   j    01/08       12/10
3   i    06/21       07/30
3   h    07/31       12/30

Я хотел бы добавить столбец 'y' к table_A, сначала сопоставив таблицы_A x с table_B's x, убедившись, что дата находится внутри start_date и end_date таблицы_B, а затем возвращает , соответствующий y .

table_A

x | date | y

1   03/06  a
1   03/15  b
2   12/04  j
3   06/23  i
3   10/05  h

Было бы здорово, если бы вы могли помочь мне с этим, спасибовы!

1 Ответ

1 голос
/ 06 марта 2019

Вам, вероятно, понадобится as.Date в сопровождении формата времени, соответствующего вашим целям (format = "%m/%d"). Затем вы можете просто проверить, находится ли каждая конкретная дата в пределах каждого временного диапазона, и вернуть соответствующий результат.

a <- read.table(text="
                x   date
                1   03/06
                1   03/15
                2   12/04
                3   06/23
                3   10/05", header=T, stringsAsFactors=F)

b <- read.table(text="
                x   y    start_date  end_date
                1   a    03/02       03/08
                1   b    03/09       03/20
                1   c    03/21       12/30
                2   j    01/08       12/10
                3   i    06/21       07/30
                3   h    07/31       12/30", header=T, stringsAsFactors=F)


out <- NULL
for (i in 1:nrow(a)){
  test <- (as.Date(a$date[i], format = "%m/%d") > as.Date(b$start_date, format = "%m/%d") &
             as.Date(a$date[i], format = "%m/%d") < as.Date(b$end_date, format = "%m/%d") & a$x[i]==b$x)
  out <- c(out, b$y[test])
}

a$y <- out
a

  x  date y
1 1 03/06 a
2 1 03/15 b
3 2 12/04 j
4 3 06/23 i
5 3 10/05 h
...