如何确定一个值是不是在使用 Dplyr 的一组行中出现最多? [复制]

Posted

技术标签:

【中文标题】如何确定一个值是不是在使用 Dplyr 的一组行中出现最多? [复制]【英文标题】:How to determine if a value appears the most in a set of rows using Dplyr? [duplicate]如何确定一个值是否在使用 Dplyr 的一组行中出现最多? [复制] 【发布时间】:2021-11-26 06:16:59 【问题描述】:

所以我有这样的数据

USER    source
A       orange
A       apple
B       banana
B       banana
B       grape
C       grape
D       orange
D       orange

我要做的就是显示对每个用户来说出现次数最多的来源。但此外,在某些情况下存在平局,在这种情况下,平局的获胜者都应在权重变量中表示为 0.50。

我对上述数据做的最终结果应该如下:

USER    source   weight
A       orange   .5
A       apple    .5
B       banana   1
C       grape    1
D       orange   1

所以基本上,我只使用权重列,因为可能存在需要考虑的关系...,但我希望有尽可能多的 1。

在 R 代码中:

data <- structure(list(USER = c("A", "A", "B", "B", "B", "C", "D", "D"
), source = c("orange", "apple", "banana", "banana", "grape", 
"grape", "orange", "orange")), row.names = c(NA, -8L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x000001f74a701ef0>)

【问题讨论】:

【参考方案1】:

使用here 中的Modes 函数,您可以使用dplyr 解决此问题。

library(dplyr)

Modes <- function(x) 
  ux <- unique(x)
  tab <- tabulate(match(x, ux))
  ux[tab == max(tab)]


data %>%
  group_by(USER) %>%
  summarise(source = Modes(source)) %>%
  mutate(weight = 1/n()) %>%
  ungroup

#  USER  source weight
#  <chr> <chr>   <dbl>
#1 A     orange    0.5
#2 A     apple     0.5
#3 B     banana    1  
#4 C     grape     1  
#5 D     orange    1  

【讨论】:

以上是关于如何确定一个值是不是在使用 Dplyr 的一组行中出现最多? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何更新除该组中最新项目之外的一组行

如何使用分析窗口 SQL 函数在同一数据集的多组行中查找 id 值

注释掉 shell 脚本中的一组行

Oracle - 从一组行中获取最小和最大日期

如何根据列中的一组行对数据框进行排名?

如何仅在该特定组内按结果查找组中未排序的一组行?