R中按操作分组中最常见的因素[重复]

Posted

技术标签:

【中文标题】R中按操作分组中最常见的因素[重复]【英文标题】:Most frequent factor in a group by operation, in R [duplicate] 【发布时间】: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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于R中按操作分组中最常见的因素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中按2字段分组[重复]

Linq在C#中按2列分组[重复]

在熊猫中按多个条件分组[重复]

如何在Postgresql中按嵌套数组的重复值分组?

在R中按名称删除列[重复]

R:在第一列中按重复项合并行