代码之家  ›  专栏  ›  技术社区  ›  Sylvia Rodriguez

基于两列中的组合删除“重复”行(R)

  •  0
  • Sylvia Rodriguez  · 技术社区  · 1 年前

    我有这个示例数据帧:

     df1 <- data.frame(v1 = c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),
          v2 = c('B', 'A', 'D', 'C', 'F', 'E', 'H', 'G'),
          value = c(1.12, 1.12, 12.52, 12.52, 3.19, 3.19, 12.52, 12.52))
     > df1
       v1 v2 value
     1  A  B  1.12
     2  B  A  1.12
     3  C  D 12.52
     4  D  C 12.52
     5  E  F  3.19
     6  F  E  3.19
     7  G  H 12.52
     8  H  G 12.52
    

    中的A和B等组合 row 1 对我来说,与B和A等组合相同,其中列中的值 value 也是一样的。如何删除重复的行?

    预期结果:

     df2 <- data.frame(v1 = c('A', 'C', 'E', 'G'),
          v2 = c('B', 'D', 'F', 'H'),
          value = c(1.12, 12.52, 3.19, 12.52))
    
     > df2
       v1 v2 value
     1  A  B  1.12
     2  C  D 12.52
     3  E  F  3.19
     4  G  H 12.52
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Ali    1 年前

    这个想法是考虑v1和v2可以互换。

    df1 <- data.frame(v1 = c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),
                      v2 = c('B', 'A', 'D', 'C', 'F', 'E', 'H', 'G'),
                      value = c(1.12, 1.12, 12.52, 12.52, 3.19, 3.19, 12.52, 12.52))
    
    ### with tidyverse:
    
    library(dplyr)
    #> 
    #> Attaching package: 'dplyr'
    #> The following objects are masked from 'package:stats':
    #> 
    #>     filter, lag
    #> The following objects are masked from 'package:base':
    #> 
    #>     intersect, setdiff, setequal, union
    library(purrr)
    
    df2 <- df1 %>%
            mutate(combination = pmap_chr(list(v1, v2), ~ paste(sort(c(..1, ..2)), collapse = ","))) %>%
            filter(!duplicated(combination)) %>%
            select(-combination)
    
    df2
    #>   v1 v2 value
    #> 1  A  B  1.12
    #> 2  C  D 12.52
    #> 3  E  F  3.19
    #> 4  G  H 12.52
    
    ### Base R:
    df2 <- df1[!duplicated(t(apply(df1[, c("v1", "v2")], 1, sort))), ]
    
    df2
    #>   v1 v2 value
    #> 1  A  B  1.12
    #> 3  C  D 12.52
    #> 5  E  F  3.19
    #> 7  G  H 12.52
    

    创建于2023-12-24 reprex v2.0.2

    推荐文章