Try
library(dplyr) df1 %>% group_by(Type, Age) %>% summarise_each(funs(sum))
Or using base R
aggregate(.~Type+Age, df1, FUN=sum)
or
library(data.table) setDT(df1)[, lapply(.SD, sum), .(Type, Age)] # Type Age count1 count2 #1: A 35 4 2 #2: A 45 2 3 #3: B 45 6 6
Update
Based on a new dataset
df2 %>% group_by(Type, Age,Pop1, Pop2, TypeDescrip) %>% summarise_each(funs(sum), matches('^count'))
data
df1 <- structure(list(Type = c("A", "A", "A", "B", "B"), Age = c(35L, 35L, 45L, 45L, 45L), count1 = c(1L, 3L, 2L, 2L, 4L), count2 = c(1L, 1L, 3L, 1L, 5L)), .Names = c("Type", "Age", "count1", "count2" ), class = "data.frame", row.names = c(NA, -5L)) df2 <- structure(list(Type = c("A", "A", "A", "B", "B"), Age = c(35L, 35L, 45L, 45L, 45L), count1 = c(1L, 3L, 2L, 2L, 4L), count2 = c(1L, 1L, 3L, 1L, 5L), Year = c(1990L, 1990L, 1990L, 1990L, 1990L), Pop1 = c(30000L, 30000L, 20000L, 20000L, 20000L), Pop2 = c(50000L, 50000L, 70000L, 70000L, 70000L), TypeDescrip = c("alpha", "alpha", "beta", "beta", "beta")), .Names = c("Type", "Age", "count1", "count2", "Year", "Pop1", "Pop2", "TypeDescrip"), class = "data.frame", row.names = c(NA, -5L))