Вот одно решение, использующее в основном целое tidyverse
:
library(dplyr)
library(tidyr)
library(purrr)
library(lubridate)
df %>%
nest(-Subject, -UniqueDate) %>%
mutate(latest_date = map2_chr(data, UniqueDate, ~ unlist(.x[max(which(dmy(.x) < dmy(.y)))])))
#> # A tibble: 3 x 4
#> Subject UniqueDate data latest_date
#> <dbl> <chr> <list> <chr>
#> 1 1 02June02 <tibble [1 x 5]> 08May02
#> 2 2 22May05 <tibble [1 x 5]> 01May05
#> 3 100 29Jan09 <tibble [1 x 5]> 22Jan09
Последняя строка немного беспорядочная - надеюсь, вы сможете увидеть, что здесь происходит.
Было бы интересно увидеть решение R для этого.
Данные
df <-
tribble(~Subject, ~Date1, ~Date2, ~Date3, ~Date4, ~Date5, ~UniqueDate,
001, "12Mar02", "03Apr02", "08May02", "09Jun02", "22Jul02", "02June02",
002, "15Feb05", "03Mar05", "18Apr05", "01May05", "16Jun05", "22May05",
100, "22Jan09", "01Feb09", "28Mar09", "10Apr09", "21May09", "29Jan09")