Альтернативы:
dat <- data.frame(
YEAR = c(1995L, 1995L, 1998L),
ID = c(100L, 101L, 100L),
COUNT = c(4L, 17L, 25L)
)
tmp <- tapply(dat, dat$YEAR, function(x) data.frame(COUNT = sum(x$COUNT), NO = nrow(x)))
tmp <- do.call(rbind.data.frame, Map(cbind, YEAR=names(tmp), tmp))
tmp
# YEAR COUNT NO
# 1995 1995 21 2
# 1998 1998 25 1
(«Дубликаты» 1995 и 1998 годов слева - это имена строк, их можно безопасно игнорировать или их можно удалить с помощью rownames(tmp) <- NULL
.)
Другое:
library(data.table)
datDT <- as.data.table(dat)
datDT[, .(COUNT = sum(COUNT), NO = .N), by = .(YEAR)]
# YEAR COUNT NO
# 1: 1995 21 2
# 2: 1998 25 1