首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:用dplyr嵌套分组摘要?

R:用dplyr嵌套分组摘要?
EN

Stack Overflow用户
提问于 2016-05-04 17:46:34
回答 1查看 356关注 0票数 0

我正在尝试使用一个假设数据集(链接到pastebin)来练习R链接到pastebin包,该数据集是人们在不同酒吧的饮酒记录:

代码语言:javascript
复制
bar_name,person,drink_ordered,times_ordered,liked_it
Moe’s Tavern,Homer,Romulan ale,2,TRUE
Moe’s Tavern,Homer,Scotch whiskey,1,FALSE
Moe’s Tavern,Guinan,Romulan ale,1,TRUE
Moe’s Tavern,Guinan,Scotch whiskey,3,FALSE
Moe’s Tavern,Rebecca,Romulan ale,2,FALSE
Moe’s Tavern,Rebecca,Scotch whiskey,4,TRUE
Cheers,Rebecca,Budweiser,1,TRUE
Cheers,Rebecca,Black Hole,1,TRUE
Cheers,Bender,Budweiser,1,FALSE
Cheers,Bender,Black Hole,1,TRUE
Cheers,Krusty,Budweiser,1,TRUE
Cheers,Krusty,Black Hole,1,FALSE
The Hip Joint,Homer,Scotch whiskey,3,FALSE
The Hip Joint,Homer,Corona,1,TRUE
The Hip Joint,Homer,Budweiser,1,FALSE
The Hip Joint,Krusty,Romulan ale,3,TRUE
The Hip Joint,Krusty,Black Hole,4,FALSE
The Hip Joint,Krusty,Corona,1,TRUE
The Hip Joint,Rebecca,Corona,2,TRUE
The Hip Joint,Rebecca,Romulan ale,4,FALSE
The Hip Joint,Bender,Corona,1,TRUE
Ten Forward,Bender,Romulan ale,1,
Ten Forward,Bender,Black Hole,,FALSE
Ten Forward,Guinan,Romulan ale,2,TRUE
Ten Forward,Guinan,Budweiser,,FALSE
Ten Forward,Krusty,Budweiser,1,
Ten Forward,Krusty,Black Hole,1,FALSE
Mos Eisley,Krusty,Black Hole,1,TRUE
Mos Eisley,Krusty,Corona,2,FALSE
Mos Eisley,Krusty,Romulan ale,1,TRUE
Mos Eisley,Homer,Black Hole,1,TRUE
Mos Eisley,Homer,Corona,2,FALSE
Mos Eisley,Homer,Romulan ale,1,TRUE
Mos Eisley,Bender,Black Hole,1,TRUE
Mos Eisley,Bender,Corona,2,FALSE
Mos Eisley,Bender,Romulan ale,1,TRUE

我曾经使用过dplyr的group_by()summarise()函数几次,但不知道如何处理更多嵌套的情况。具体来说,我想问的问题如下:

  1. 对于每个唯一的bar_name,每个person是否都要完全相同的饮料组合(drink_ordered)?在这个数据集中,这将被标记为TRUE的酒吧Moe's Tavern,Cheers和Mos Eisley。
  2. 即使每个person在一个特定的bar_name中订购了完全相同的饮料组合,他们是否按相同的次数(times_ordered)订购了这些饮料?例如,Moe's Tavern和Mos Eisley会在这个问题上将我标记为TRUE
  3. 那么,即使每个person在一个特定的酒吧里订购了完全相同的饮料组合次数相同的次数,他们对这些饮料的看法(liked_it)也完全一样吗?在这个数据集中,这将是Mos Eisley的TRUE

请注意,在dataset中有一些案例( Hip联合),其中所有三个问题的答案都是FALSE,并且存在缺失的值(10前进)。

理想情况下,我希望生成第一列为bar_name的表,以及三个表示TRUEFALSE的布尔列,分别表示这三个问题。

如何在R中使用dplyr有效地实现这一点?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-04 18:28:08

你可以:

代码语言:javascript
复制
DF %>%
  arrange(drink_ordered, times_ordered, liked_it) %>% group_by(bar_name, person) %>%
  summarise(
    Ld   = toString(drink_ordered),
    Ldt  = paste(Ld, toString(times_ordered), sep="_"),
    Ldtl = paste(Ldt, toString(liked_it), sep="_")
  ) %>% 
  group_by(bar_name) %>% 
  summarise_each(funs(n_distinct)) %>%
  mutate_each(funs(. == 1), -person, -bar_name)

#        bar_name person    Ld   Ldt  Ldtl
#           (chr)  (int) (lgl) (lgl) (lgl)
# 1        Cheers      3  TRUE  TRUE FALSE
# 2  Moe’s Tavern      3  TRUE FALSE FALSE
# 3    Mos Eisley      3  TRUE  TRUE  TRUE
# 4   Ten Forward      3 FALSE FALSE FALSE
# 5 The Hip Joint      4 FALSE FALSE FALSE
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37034627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档