gpt4 book ai didi

删除重复项,保留最频繁的行

转载 作者:行者123 更新时间:2023-12-04 09:15:45 27 4
gpt4 key购买 nike

我想对我的数据进行重复数据删除,保留出现频率最高的行。如果行中存在平局,我不在乎返回的是哪个——按字母或数字顺序排列的第一个就可以了。我想通过一组 idvar 来做到这一点。

雷:

df <- data.frame(
id = rep("a", 8),
var = c(rep("b", 4), rep("c", 4)),
val = c("d", "d", "d", "e", "f", "f", "g", "g")
)

> df
id var val
1 a b d
2 a b d
3 a b d
4 a b e
5 a c f
6 a c f
7 a c g
8 a c g

应该:
  id var val
1 a b d
2 a c f

我正在处理大型数据集和 tidyverse 管道链,因此最好使用 dplyr 解决方案。

最佳答案

使用 tablewhich.max 提取 mode :

df %>% 
group_by(id, var) %>%
summarise(val = {t <- table(val); names(t)[which.max(t)] })

# A tibble: 2 x 3
# Groups: id [?]
# id var val
# <fct> <fct> <chr>
#1 a b d
#2 a c f

在基 R 中执行此操作的另一种方法:直接创建一个三向列联表,然后沿第三个轴找到 max 列:
apply(table(df), c(1, 2), function(v) names(v)[which.max(v)])

# var
#id b c
# a "d" "f"

将其转换为数据框:
as.data.frame.table(
apply(table(df), c(1, 2), function(v) names(v)[which.max(v)])
)

# id var Freq
#1 a b d
#2 a c f

关于删除重复项,保留最频繁的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49660258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com