group_by,获得最频繁和第二频繁

group_by, get most frequent and second most frequent

我有以下数据集:

a   b

1   a           
1   a           
1   a           
1   none            
2   none            
2   none            
2   b           
3   a           
3   c           
3   c
3   d
4   a

我想为任何 a 获取 b 中最频繁出现的值,为任何 a 获取 b 中第二频繁出现的值。如果 b 中的两个值具有相同的频率,我对被认为是 "first" 或 "second".

中的任何一个都无动于衷

在这种情况下,预期输出为:

d2:

a    first    second 
1    a        none
2    none     b
3    c        a(or d, doesn't matter)
4    a        NA

如您所见,a=4 在 b 中只有一个值,因此我希望输出列中有一个 NA "second",因为没有第二个最常见的值。

数据:

a <- c(1,1,1,1,2,2,2,3,3,3,3,4)
b<- c("a","a", "a", "none", "none", "none", "b", "a", "c" , "c",  "d","a")  
d <-  data.frame(a,b)

我目前尝试的是以下

d1 <-  d %>% group_by(a) %>% summarize ( first =names(which.max(table(b)))  , second= names(which.max(table(b)[-which.max(table(b))] )))

但它无法正常工作,知道如何操作吗?

您可以 count ab 组合的行数以及 a select 中的第一个和第二个值的每个值 summarise.

library(dplyr)
 d %>%
  count(a, b, sort = TRUE) %>%
  group_by(a) %>%
  summarise(first = b[1],second = b[2])


# A tibble: 4 x 3
#      a first second
#  <dbl> <chr> <chr> 
#1     1 a     none  
#2     2 none  b     
#3     3 c     a     
#4     4 a     NA    

这里有一个选项data.table

library(data.table)
setDT(d)[, .N, .(a, b)][order(N), .(first = first(b), second = b[2]), a]