如何选择R中与其他组相关的组中最常见的值?

Hom*_*son 3 sorting group-by r

我在 R 中有以下数据框:

ID = c(rep(1,5),rep(2,3),rep(3,2),rep(4,6));ID
VAR = c("A","A","A","A","B","C","C","D",
             "E","E","F","A","B","F","C","F");VAR
CATEGORY = c("ANE","ANE","ANA","ANB","ANE","BOO","BOA","BOO",
        "CAT","CAT","DOG","ANE","ANE","DOG","FUT","DOG");CATEGORY

DATA = data.frame(ID,VAR,CATEGORY);DATA
Run Code Online (Sandbox Code Playgroud)

如下表所示:

ID VAR 类别
1 A 安尼
1 A 安尼
1 A 全日空航空公司
1 A ANB
1 安尼
2 C 嘘声
2 C 蟒蛇
2 D 嘘声
3
3
4 F
4 A 安尼
4 安尼
4 F
4 C 氟尿嘧啶
4 F

给定 RI 中上述数据帧的理想输出希望是这样的:

ID 文本 类别
1 A 安尼
2 C 嘘声
3
4 F

更具体地说:我希望 ID 为 1 来搜索 VAR 列中最常见的值(A),然后搜索与最常见值 A 相关的 CATEGORY 列中最常见的值(ANE),依此类推。

我怎样才能在 R 中做到这一点?想象一下这是一个示例。我的真实数据框包含 850.000 行并具有 14000 个唯一 ID。

Tar*_*Jae 6

另一种dplyr策略使用countand slice

library(dplyr)
DATA %>% 
    group_by(ID) %>% 
    count(VAR, CATEGORY) %>% 
    slice(which.max(n)) %>% 
    select(-n)
Run Code Online (Sandbox Code Playgroud)
     ID VAR   CATEGORY
  <dbl> <chr> <chr>   
1     1 A     ANE     
2     2 C     BOA     
3     3 E     CAT     
4     4 F     DOG  
Run Code Online (Sandbox Code Playgroud)