Я не уверен, почему вы вообще хотите такое поведение, но вы можете добиться этого с помощью этого кода:
x=read.table(header = T, text="
A B C D
Aa Bb C D
Aa Bb C D")
x %>%
group_by(C, D) %>%
summarise_at(c("A","B"), ~paste(.x, collapse=""))
По сути, вы группируете по своим «фиксированным» столбцам, и вы сворачиваетесь в A и B используя пасту.
Это чтобы получить ожидаемый результат. Если я ссылаюсь на ваш текст, он выглядит примерно так:
x=read.table(header = T, text="
A B C D
Aa Ba C D
Aa Ba C D
Aa Bb C D")
x %>%
group_by(C, D) %>%
summarise_at(c("A","B"), ~{
if(length(levels(factor(.x)))==1) .x[1] else paste(unique(.x), collapse="")
})
Если в столбце есть только одно значение, вы выводите это значение, в противном случае вы выводите объединение всех уникальных значений.
# A tibble: 1 x 4
# Groups: C [1]
C D A B
<fct> <fct> <fct> <chr>
1 C D Aa BaBb