如何确定一个值是不是在使用 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 的一组行中出现最多? [复制]的主要内容,如果未能解决你的问题,请参考以下文章