Функция max.col
имеет метод для работы со связями, так что вы можете превратить каждую группу в матрицу подсчетов и использовать max.col
df<-data.frame(group=c(1, 1, 1, 1, 2, 2, 2),
char=c("a", "b", "z", "a", "c", "c", "b"),
want=c("a", "a", "a", "a", "c", "c", "c"))
df$want1 <- ave(df$char, df$group, FUN = function(x) {
x <- t(table(x))
# print(x)
colnames(x)[max.col(x, ties.method = 'first')]
})
df
# group char want want1
# 1 1 a a a
# 2 1 b a a
# 3 1 z a a
# 4 1 a a a
# 5 2 c c c
# 6 2 c c c
# 7 2 b c c
Для каждого уникального group
, вы найдете индекс столбца с максимальным значением, затем берется имя столбца:
## group - 1
a b c z
[1,] 2 1 0 1
## group - 2
a b c z
[1,] 0 1 2 0