【问题标题】:Combine, merge, coalesce rows by group and replace certain value by another value without pivoting按组组合、合并、合并行并将某个值替换为另一个值而不进行旋转
【发布时间】:2023-03-22 18:12:01
【问题描述】:

是否有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 u在列@987654338 @到E

学习的经验:

combine rows in data frame containing NA to make complete row

Merging two rows with some having missing values in R

【问题讨论】:

  • 这到底是什么逻辑? “u”总是覆盖“t”?这是唯一的规则,还是您需要能够扩展得比这更大?为什么不能转动?
  • 逻辑是控制覆盖参数。
  • @camille。您能否解释一下为什么要删除 tidyverse 标签。非常感谢!
  • 来自tidyverse 标签信息:“如果您的问题涉及到 tidyverse 的一个或两个组件,例如 dplyr 或 ggplot2,请不要使用。使用 那些 标签,并且标记r 以获得更好的响应。除非您的问题是关于整个 tidyverse 包、它的安装或与您的系统的集成,否则请为您实际使用的包使用标签。很少使用 library(tidyverse)仅需要 library(dplyr) 时的最小可重现示例。”
  • 非常感谢您的解释。我知道这些信息。我遇到了以下问题:在我的解决方案中,可能需要所有属于tidyverse 的包:在这种情况下,我们可以使用dplyrtidyrreadrpurrr at至少,也许有一些额外的辅助函数stringrforecast。这就是我使用tidyverse 的原因。基本上我没有问题可以删除。但是我在我的问题中描述的任务中挣扎了很多次。据我所知,对于行,没有一个简洁的解决方案......比如使用coalesce 来表示列。

标签: r dplyr tidyverse coalesce


【解决方案1】:

我们可以按 'A'、'B'、summariseacross 列、order 值分组,这样 'u' 将在其他值之前返回并选择 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    

【讨论】:

  • 掌握这个完美的作品。请参阅此处 stackoverflow.com/questions/69196589/…>。有趣的是,没有组合两行和控制替换什么的功能!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2014-06-19
  • 2019-03-15
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多