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中按操作分组中最常见的因素[重复]的主要内容,如果未能解决你的问题,请参考以下文章