Мы можем slice
строк, проверив наибольшее значение в «Доход», сгруппированных по «ID»
library(dplyr)
df1 %>%
group_by(ID) %>%
slice(which.max(Income))
Или используя data.table
library(data.table)
setDT(df1)[, .SD[which.max(Income)], by = ID]
Или с base R
df1[with(df1, ave(Income, ID, FUN = max) == Income),]
# ID Income
#1 1 98765
#4 2 5498
#5 5 23
#6 6 98
#8 7 67871
#9 9 983754
#13 10 4744
#14 11 6853
данные
df1 <- structure(list(ID = c(1L, 2L, 2L, 2L, 5L, 6L, 7L, 7L, 9L, 10L,
10L, 10L, 10L, 11L), Income = c(98765L, 3456L, 67L, 5498L, 23L,
98L, 5645L, 67871L, 983754L, 982L, 2374L, 875L, 4744L, 6853L)),
class = "data.frame", row.names = c(NA,
-14L))