R group by,每个分组元素与最公共因子关联

lymgl2op  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(86)

我想按列a分组,并为每个唯一的a选择最常见的因子b。例如:

tibble(a = c(1,1,1,2,2,2), b = factor(c('cat', 'dog', 'cat', 'cat', 'dog', 'dog'))) %>%
    reframe(b = most_common(b), .by = a)

我希望它能产生:
| 一个|B|
| --------------|--------------|
| 1|猫|
| 二|狗|
但是,most_common函数不存在。是否有一个有效的R函数用于此目的?这一定是一个非常常见的数据清理需求(我需要它的目的)。我搜索并找到了实现mode函数的人。我可以使用其中的一个,但他们似乎效率低下。有没有更好的方法来解决这个整体问题?

brccelvz

brccelvz1#

我们可以使用table + max.col

d <- table(df)
data.frame(
  a = as.numeric(row.names(d)),
  b = colnames(d)[max.col(d)]
)

它给出了

a   b
1 1 cat
2 2 dog

或者像下面这样使用dplyr

group_by(a) %>%
  summarise(b = names(which.max(table(b))))

它给出了

# A tibble: 2 × 2
      a b
  <dbl> <chr>
1     1 cat
2     2 dog

相关问题