Eu tenho esse conjunto de dados muito simples.
id <- c(12, 13, 26, 45, 55, 66)
group <- c("one", "one", "two", "two", "three", "three")
txt <- c("quick", "brown", NA, "fox", NA, NA)
df <- data.frame(id, group, txt)
df
> df
id group txt
1 12 one quick
2 13 one brown
3 26 two <NA>
4 45 two fox
5 55 three <NA>
6 66 three <NA>
Quero agregar por grupo. Estou tentando isso,
df |>
dplyr::group_by(group) |>
dplyr::summarise(txt = paste(txt, collapse = ", "))
# A tibble: 3 × 2
group txt
<chr> <chr>
1 one quick, brown
2 three NA, NA
3 two NA, fox
Como vemos, eles NA
são revelados como personagens. Em segundo lugar, três vem depois de um na coluna do grupo. Eu quero ter algo assim,
group txt
1 one quick, brown
2 two fox
3 three <NA>
Alguma ideia de como resolver esse problema simples?
Você pode lidar com isso sozinho por código -
Ou use
hablar::max_
o que faz a mesma coisa.Base R
Verifique se todos os valores são NA e, em caso positivo, retorne NA; caso contrário, remova os NA e use toString nos elementos restantes.
Uma variação dessa abordagem, que é um pouco mais compacta, é calcular toString como acima, mas então usar Find para retorná-lo ou NULL se for uma string vazia.
... %||% NA
Em seguida, converte NULL para NA.