如何使用Dplyr确定一组行中某个值是否最常出现?
如何使用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日
使用这里的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