按组组合、合并、合并行,并在不旋转的情况下用另一个值替换某个值

Combine, merge, coalesce rows by group and replace certain value by another value without pivoting

是否有 tidyverse 方法来合并同一组的行以替换某些值:

我不想要 pivot 解决方案!

这是我的数据框:

df <- structure(list(A = c(1L, 1L, 2L, 3L, 4L, 5L), B = c("a", "a", 
"b", "c", "d", "e"), C = c("u", "t", "t", "u", "t", "t"), D = c("t", 
"u", "u", "t", "u", "u"), E = c("t", "t", "u", "u", "u", "u")), 
class = "data.frame", row.names = c(NA, -6L))

  A B C D E
1 1 a u t t
2 1 a t u t
3 2 b t u u
4 3 c u t u
5 4 d t u u
6 5 e t u u

我想要的输出:

  A B C D E
1 1 a u u t
2 2 b t u u
3 3 c u t u
4 4 d t u u
5 5 e t u u

第 1 行和第 2 行具有相同的组 1a(第 AB 列)->

这组应该合并成一行 1 a 替换 t uC 列到 E

学习的课程:

Merging two rows with some having missing values in R

我们可以按 'A'、'B'、summarise across 列、order 值分组,这样 'u' 将 return 在其他值之前和 select first 元素

library(dplyr)
df %>%
    group_by(A, B) %>% 
    summarise(across(everything(), 
       ~ first(.[order(. != 'u')])), .groups = 'drop')

-输出

# A tibble: 5 x 5
      A B     C     D     E    
  <int> <chr> <chr> <chr> <chr>
1     1 a     u     u     t    
2     2 b     t     u     u    
3     3 c     u     t     u    
4     4 d     t     u     u    
5     5 e     t     u     u