Как заметили Джон и Мориц, ваш пример неясен: вы не указываете, что для вас является неправильным форматом, и упоминаете «текущий год», но, например, не описываете ожидаемый результат на следующий год.
Вот попытка кода фактически ответить на ваш вопрос:
library(dplyr)
x = read.table(text = "
ID VALUE DATE
1 10 2019-09
1 12 2018-09
1 12 2018-09-04
1 12 2018-99
2 13 2019-10
2 14 2018-10
3 67 2019-01
3 78 2018-01
", header=T)
x %>%
mutate(DATE = paste0(DATE, "-01") %>% as.Date("%Y-%m-%d")) %>%
group_by(ID) %>%
filter(DATE==max(DATE, na.rm=T))
Я вставил две строки с «неправильным» форматом (по мне) и трактовал «текущий год» какМаксимальный год, который вы можете найти в столбце для каждого идентификатора.
Это может быть неверным утверждением, но мне нужно больше информации, чтобы лучше ответить на него.