我正在尝试使用一个假设数据集(链接到pastebin)来练习R链接到pastebin包,该数据集是人们在不同酒吧的饮酒记录:
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()函数几次,但不知道如何处理更多嵌套的情况。具体来说,我想问的问题如下:
bar_name,每个person是否都要完全相同的饮料组合(drink_ordered)?在这个数据集中,这将被标记为TRUE的酒吧Moe's Tavern,Cheers和Mos Eisley。person在一个特定的bar_name中订购了完全相同的饮料组合,他们是否按相同的次数(times_ordered)订购了这些饮料?例如,Moe's Tavern和Mos Eisley会在这个问题上将我标记为TRUE。person在一个特定的酒吧里订购了完全相同的饮料组合次数相同的次数,他们对这些饮料的看法(liked_it)也完全一样吗?在这个数据集中,这将是Mos Eisley的TRUE。请注意,在dataset中有一些案例( Hip联合),其中所有三个问题的答案都是FALSE,并且存在缺失的值(10前进)。
理想情况下,我希望生成第一列为bar_name的表,以及三个表示TRUE或FALSE的布尔列,分别表示这三个问题。
如何在R中使用dplyr有效地实现这一点?非常感谢。
发布于 2016-05-04 18:28:08
你可以:
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 FALSEhttps://stackoverflow.com/questions/37034627
复制相似问题