【问题标题】:R: nested grouped summaries with dplyr?R:使用 dplyr 嵌套分组摘要?
【发布时间】:2016-05-04 17:46:34
【问题描述】:

我正在尝试使用人们在不同酒吧饮酒记录的假设数据集 (link to pastebin) 练习 R dplyr 包:

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)?在此数据集中,Moe's Tavern、Cheers 和 Mos Eisley 酒吧将被标记为 TRUE

  2. 即使每个person 在特定bar_name 中订购完全相同的饮料组合,他们订购饮料的次数是否相同(times_ordered)?例如,对于这个问题,Moe's Tavern 和 Mos Eisley 会将我标记为 TRUE

  3. 那么,即使每个person 在特定酒吧订购完全相同的饮料组合的次数相同,他们对饮料的意见 (liked_it) 是否完全相同?在这个数据集中,Mos Eisley 的 TRUE

请注意,在数据集中存在一些案例(髋关节),其中三个问题的答案都是 FALSE,并且存在缺失值(前十位)。

理想情况下,我希望生成一个表格,其中第一列是bar_name,另外三个布尔列分别表示三个问题的TRUEFALSE

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

【问题讨论】:

  • @Frank 感谢您注意到关于十前锋的错误,已更正。

标签: r dplyr summarization


【解决方案1】:

你可以这样做:

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

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2020-03-06
    相关资源
    最近更新 更多