R:通过dplyr嵌套分组和总计数?

时间:2016-04-18 17:49:36

标签: r grouping dplyr

我尝试使用R中的dplyr包来调用数据框 fruit_eaten像这样:

person,fruit
Alice,apple
Alice,apple
Alice,apple
Alice,orange
Bob,apple
Bob,banana
Bob,grape
Bob,grape
Bob,grape
Cheryl,orange
Cheryl,orange
Cheryl,kiwi
Donald,apple
Donald,apple
Donald,grape
Donald,grape

我想使用dplyr执行以下操作:

对于每种类型的水果,计算谁吃了最多的(所以这不是一个简单的计数,我想找到最大数量)和生成这个表的数量:

| fruit  | who_ate_most | how_many |
|--------|--------------|----------|
| apple  | Alice        | 3        |
| orange | Cheryl       | 2        |
| banana | Bob          | 1        |
| grape  | Bob          | 3        |
| kiwi   | Cheryl       | 1        |

此外,我不知道如何处理两个或两个以上的人都吃相同最大数量水果的情况。

同样地,我试图制作一张表格,列出每个人及他们最常吃的水果和多少:

| person | ate_most_of | how_many |
|--------|-------------|----------|
| Alice  | apple       | 3        |
| Bob    | grape       | 3        |
| Cheryl | orange      | 2        |
| Donald | apple       | 2        |

当然,第二个输出表的类似问题是如果一个人吃了多个水果的相同最大数量该怎么办?

我知道group_by()中的dplyr功能,但看起来我有多个"组"这里。如何获得" how_many"的最大数量?两个表中的列?

P.S。原始数据采用逗号分隔格式(pastebin link here)。

1 个答案:

答案 0 :(得分:2)

对于每种类型的水果,计算谁吃了大部分(这不是一个简单的计数,而是最大数量):

java.util.concurrent

注意df %>% count(fruit, person) %>% top_n(1) # fruit person n # (fctr) (fctr) (int) # 1 apple Alice 3 # 2 banana Bob 1 # 3 grape Bob 3 # 4 kiwi Cheryl 1 # 5 orange Cheryl 2 df %>% count(person, fruit) %>% top_n(1) # person fruit n # (fctr) (fctr) (int) # 1 Alice apple 3 # 2 Bob grape 3 # 3 Cheryl orange 2 # 4 Donald apple 2 # 5 Donald grape 2 count | tally | summarise的包装器,它为您执行n。注意底层group_by的排序差异。另请注意,每个摘要(基础group_by摘要)都会剥离一个级别的分组。

根据每条领带获得一条记录的评论,我们可以按照@Frank的建议使用n()。此外,我们可以通过从其向量中提取toString值来“保留”n

first()