Ниже представлен обходной способ репликации group_by
и slice
в базе с использованием split
и lapply
с [
.
do.call(rbind,
lapply(split(df, df$name),
function(x) x[which.max(as.Date(paste0("01-", x$date), "%d-%b-%Y")),])
)
# name date x y z
# a a March-2018 1 2 2
# b b June-2017 3 4 4
# c c Sep-2018 5 5 6
Другой вариант - aggregate
, а затемmerge
.Похоже, может быть какой-то другой способ сделать это на базе, по которой я скучаю.
to.keep <-
aggregate(date ~ name, data = df,
function(x) x[which.max(as.Date(paste0("01-", x), "%d-%b-%Y"))])
merge(df, to.keep, by = names(to.keep))
# name date x y z
# a a March-2018 1 2 2
# b b June-2017 3 4 4
# c c Sep-2018 5 5 6
Используемые данные
structure(list(name = c("a", "a", "b", "b", "c", "c"), date = c("March-2018",
"Feb-2018", "June-2017", "April-2017", "Sep-2018", "Aug-2017"
), x = c(1L, 2L, 3L, 4L, 5L, 7L), y = c(2L, 3L, 4L, 5L, 5L, 7L
), z = c(2L, 3L, 4L, 5L, 6L, 8L)), row.names = c(NA, -6L), class = "data.frame")