На основании описания, если мы хотим удалить наименее частые,
library(dplyr)
df %>%
group_by(name, id) %>%
mutate(n = n()) %>%
group_by(name) %>%
filter(n != min(n)) %>%
select(-n)
# A tibble: 5 x 2
# Groups: name [2]
# id name
# <int> <chr>
#1 100 Rank1
#2 100 Rank1
#3 100 Rank1
#4 400 Rank2
#5 400 Rank2
или используя ту же методологию с data.table
library(data.table)
i1 <- setDT(df)[, n := .N, .(name, id)][, .I[n != min(n)], name]$V1
df[i1][, n := NULL][]
Но, если мы хотим удалить строки, которые не имеют повторяющихся идентификаторов для каждого имени,
df[duplicated(df)|duplicated(df, fromLast = TRUE),]