如何使用Dplyr确定一组行中某个值是否最常出现?

59 浏览
0 Comments

如何使用Dplyr确定一组行中某个值是否最常出现?

这个问题已经有了答案:

如何找到统计模式?

我有这样的数据:

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 = )

admin 更改状态以发布 2023年5月25日
0
0 Comments

使用这里Modes函数,您可以使用dplyr解决这个问题。\n\n

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
#      
#1 A     orange    0.5
#2 A     apple     0.5
#3 B     banana    1  
#4 C     grape     1  
#5 D     orange    1  

0