Вот вариант с slice
. После группировки по 'doc_id', 'term', slice
строке со значением max
'freq'
library(dplyr)
df %>%
group_by(doc_id, terms) %>%
slice(which.max(freq))
# A tibble: 3 x 3
# Groups: doc_id, terms [3]
# doc_id terms freq
# <dbl> <fct> <dbl>
#1 1 bye 1
#2 1 virginia 1
#3 2 energy 2
или просто summarise
, если имеется только три столбца
df %>%
group_by(doc_id, terms) %>%
summarise(freq = max(freq))
Или с arrange
и distinct
df %>%
arrange(doc_id, terms, desc(freq)) %>%
distinct(doc_id, terms, .keep_all = TRUE)
Или в base R
, order
наборе данных сначала, так что значение max
'freq' будет Первая строка для каждой группы, а затем используйте duplicated
, чтобы удалить дублирующиеся строки
df1 <- df[with(df, order(doc_id, terms, -freq)),]
df1[!duplicated(df1[-3]),]
# doc_id terms freq
#2 1 bye 1
#1 1 virginia 1
#3 2 energy 2