【问题标题】:Most frequent factor in a group by operation, in R [duplicate]R中按操作分组中最常见的因素[重复]
【发布时间】:2021-09-16 21:31:33
【问题描述】:

我有一个这样的数据框:

ID_CLI CHURN
12 0
12 0
25 1
25 1
25 1
27 0

我想在 ID_CLI 上进行分组并得到如下输出:

ID_CLI CHURN
12 0
25 1
27 0

【问题讨论】:

    标签: r


    【解决方案1】:

    这是dplyr的方式。

    library(dplyr)
    
    df1 %>%
      count(ID_CLI, CHURN) %>%
      group_by(ID_CLI) %>%
      slice_max(order_by = n, n = 1) %>%
      select(-n)
    ## A tibble: 3 x 2
    ## Groups:   ID_CLI [3]
    #  ID_CLI CHURN
    #   <int> <int>
    #1     12     0
    #2     25     1
    #3     27     0
    

    还有一个基本的 R 方式。

    df2 <- local({
      tbl <- table(df1)
      data.frame(
        ID_CLI = unique(df1$ID_CLI),
        CHURN = colnames(tbl)[apply(tbl, 1, which.max)]
      )
    })
    df2
    #  ID_CLI CHURN
    #1     12     0
    #2     25     1
    #3     27     0
    

    数据

    df1 <- read.table(text = "
    ID_CLI  CHURN
    12  0
    12  0
    25  1
    25  1
    25  1
    27  0
    ", header = TRUE)
    

    【讨论】:

      【解决方案2】:

      我想我找到了答案:

          df <- df %>% 
          group_by(ID_CLI) %>% 
          summarize (CHURN =names(which.max(table(CHURN))))
      
      

      【讨论】:

        【解决方案3】:

        这是一个非常简单的操作。我建议您查看一些初学者包,尤其是从dplyr 开始。不过,这里有一个对您有用的答案。

        library(dplyr)
        
        df %>% 
          distinct()
        

        df 由以下给出:

        df <- structure(list(ID_CLI = c(12, 12, 25, 25, 25, 27), 
                             CHURN = c(0, 0, 1, 1, 1, 0)),
                        class = "data.frame", row.names = c(NA, -6L))
        

        您可以使用?distinct 了解它的运作方式以备将来使用。快速入门的备忘单:

        https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

        【讨论】:

          【解决方案4】:

          您可以从此处使用Mode 函数并将其应用于每个组。

          library(dplyr)
          
          Mode <- function(x) {
            ux <- unique(x)
            ux[which.max(tabulate(match(x, ux)))]
          }
          
          df %>% group_by(ID_CLI) %>%  summarize(CHURN = Mode(CHURN))
          
          #  ID_CLI CHURN
          #   <int> <int>
          #1     12     0
          #2     25     1
          #3     27     0
          

          【讨论】:

            猜你喜欢
            • 2015-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-15
            • 1970-01-01
            • 1970-01-01
            • 2020-11-17
            • 1970-01-01
            相关资源
            最近更新 更多