【问题标题】:Count number of different values within columns groupby r计算列 groupby r 中不同值的数量
【发布时间】:2020-11-27 06:47:38
【问题描述】:

我有一个 df,例如:

COL1 COL2 
G1   SP1  
G1   SP2  
G1   SP1  
G2   SP1  
G2   SP6  
G2   SP9  
G3   SP9  
G4   SP9  
G4   SP2  

我想添加一个 COL3,它是一组 COL1 不同 COL2 值的数量:

COL1 COL2 COL3
G1   SP1  2
G1   SP2  2
G1   SP1  2
G2   SP1  3
G2   SP6  3
G2   SP9  3
G3   SP9  1
G4   SP9  2
G4   SP2  2

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    COL1分组后可以使用n_distinct(COL2):

    library(dplyr)
    
    df %>% 
      group_by(COL1) %>% 
      mutate(COL3 = n_distinct(COL2))
    
    #> # A tibble: 9 x 3
    #> # Groups:   COL1 [4]
    #>   COL1  COL2   COL3
    #>   <fct> <fct> <int>
    #> 1 G1    SP1       2
    #> 2 G1    SP2       2
    #> 3 G1    SP1       2
    #> 4 G2    SP1       3
    #> 5 G2    SP6       3
    #> 6 G2    SP9       3
    #> 7 G3    SP9       1
    #> 8 G4    SP9       2
    #> 9 G4    SP2       2
    

    【讨论】:

      【解决方案2】:

      另一种可能是

      df %>% 
        group_by(COL1) %>%
        mutate(COL3 = length(unique(c_across(COL2))))
      

      # A tibble: 9 x 3
      # Groups:   COL1 [4]
        COL1  COL2   COL3
        <chr> <chr> <int>
      1 G1    SP1       2
      2 G1    SP2       2
      3 G1    SP1       2
      4 G2    SP1       3
      5 G2    SP6       3
      6 G2    SP9       3
      7 G3    SP9       1
      8 G4    SP9       2
      9 G4    SP2       2
      

      【讨论】:

        【解决方案3】:

        data.table 的另一个选项

        library(data.table)
        setDT(df)[, COL3 := uniqueN(COL2), COL1]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-03
          • 2022-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多