Мы можем сделать группу по 'ID', 'Code' и slice
строке с max
'Expiry Date'. В R
, max
получает значение max
imum, which.max
индекс максимального значения
library(dplyr)
data %>%
group_by(ID, Code) %>%
slice(which.max(`Expiry Date`))
# A tibble: 2 x 4
# Groups: ID, Code [2]
# ID Code Desc. `Expiry Date`
# <int> <chr> <chr> <date>
#1 1 2C Long 2020-02-01
#2 2 <NA> Tall 2019-04-30
Или с data.table
library(data.table)
setDT(data)[, .SD[which.max(`Expiry Date`)], .(ID, Code)]
ПРИМЕЧАНИЕ. В base R
нет функции с именем MAX
. Это max
. Кроме того, мы принимаем Expiry Date
как Date
класс. Если нет, его сначала нужно преобразовать в Date
класс с as.Date
В base R
, мы можем сделать order
на основе «даты истечения» и затем использовать duplicated
data1 <- data[do.call(order, data[c('ID', 'Code', 'Expiry Date')]),]
data1[!duplicated(data1[c('ID', 'Code')], fromLast = TRUE),]
# ID Code Desc. Expiry Date
#2 1 2C Long 2020-02-01
#3 2 <NA> Tall 2019-04-30
данные
data <- structure(list(ID = c(1L, 1L, 2L, 2L), Code = c("2C", "2C", NA,
NA), Desc. = c("Long", "Long", "Tall", "Tall"),
`Expiry Date` = structure(c(17563,
18293, 18016, 16919), class = "Date")), row.names = c(NA, -4L
), class = "data.frame")