1

我有一个这样的数据框:

工厂 面包
一个 一个
一个 一个
C
b
d
C 一个
D e

我想找到面包数量最多的工厂的名字

我写了两个代码,得到了不同的答案。

1.

df %>%
  group_by(factory, bread)%>%
  summarise(n = n())%>%
  arrange(desc(n))
df %>% 
  group_by(factory) %>% 
  mutate(number = length(unique(bread)))%>% 
  arrange(desc(number))

请问哪一个是正确的代码,为什么?

谢谢!!!!

4

2 回答 2

3

我们可以n_distinctdplyr包中使用:

library(dplyr)
df %>%
    group_by(factory)%>%
    summarise(bread = n_distinct(bread))

输出:

  factory bread
  <chr>   <int>
1 A           2
2 B           1
3 C           1
于 2021-08-08T20:30:27.333 回答
1

一个data.table选项

> setorder(setDT(df)[, .(Bread = uniqueN(Bread)), Factory], -Bread)[]
   Factory Bread
1:       B     3
2:       A     1
3:       C     1
4:       D     1
于 2021-08-08T20:52:46.007 回答