代码之家  ›  专栏  ›  技术社区  ›  max

当一行重复时,标记它是来自一个组、另一个组还是两者?

  •  0
  • max  · 技术社区  · 4 年前

    我有一个具有重复ID的数据帧,每个ID都有一个组标签。我该怎么用 tidyr 或者从第一个数据帧到第二个数据帧的相关工具?我需要删除重复的行,并标记每一行是否存在于组“a”、组“b”或“两者都有”中。

    library(tidyverse)
    
    df <- tibble(id=c(1,2,2,3,4,4),
                 label=c("a","a","b","b","a","b"))
    
    # A tibble: 6 x 2
         id label
      <dbl> <chr>
    1     1 a    
    2     2 a    
    3     2 b    
    4     3 b    
    5     4 a    
    6     4 b    
    
    df_desired <- tibble(id=c(1,2,3,4),
                         label=c("a","both","b","both"))
    
    # A tibble: 4 x 2
         id label
      <dbl> <chr>
    1     1 a    
    2     2 both 
    3     3 b    
    4     4 both 
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Duck    4 年前

    另一种方式 dplyr 可以是:

    library(tidyverse)
    #Data
    df <- tibble(id=c(1,2,2,3,4,4),
                 label=c("a","a","b","b","a","b"))
    #Code
    df %>% group_by(id) %>% summarise_all(toString) %>%
      mutate(label=ifelse(nchar(label)==1,label,'both'))
    

    输出:

    # A tibble: 4 x 2
         id label
      <dbl> <chr>
    1     1 a    
    2     2 both 
    3     3 b    
    4     4 both 
    
        2
  •  1
  •   Cettt    4 年前

    以下是一个可能的解决方案,使用 summarise

    df %>%
      group_by(id) %>%
      summarise(label = if_else(length(unique(label)) == 2, "both", first(label)),
                  .groups = "drop")
    
    # A tibble: 4 x 2
         id label
      <dbl> <chr>
    1     1 a    
    2     2 both 
    3     3 b    
    4     4 both 
    
    推荐文章