2016-05-04 13 views
0

は、私は別のバーで人々の飲酒レコードの仮想的なデータセット(link to pastebin)とR dplyrパッケージを練習しようとしている:私は数回をdplyrのgroup_by()summarise()機能を使用している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 

が、わかりませんより多くのネストされた状況に対処する方法。ドリンク(drink_ordered)の正確な同じ組み合わせは、それぞれ独自のbar_nameについて

  1. personためでした:具体的には、私のような質問をしたいですか?このデータセットでは、Moe's Tavern、Cheers、Mos EisleyのバーにはTRUEというマークが付けられています。各personは、彼らが飲み物に同じ回数(times_ordered)を注文しました、特にbar_nameで飲み物を正確に同じ組み合わせを注文した場合であっても

  2. ?たとえば、Moe's TavernとMos Eisleyは私にこの質問のためにTRUEとマークします。

  3. 次に、それぞれの飲み物の正確な同じ組み合わせが特定のバーで同じ回数だけ注文されたとしても、飲み物の意見は全く同じですか(liked_it)?このデータセットでは、Mos Eisleyの場合はTRUEになります。

データセット内のケースの答えは、すべての3つの質問に対してFALSEだろう、と欠損値(テン・フォワード)がある(股関節)があることを確認します。

理想的には、私が最初の列がbar_nameあり、そしてさらに3つのブール値の列が3つの質問のそれぞれについてTRUEまたはFALSEを言って、テーブルを生成することを願っています。

Rのdplyrでこれを効率的に達成するにはどうすればよいですか?どうもありがとうございました。

+1

を。 – hpy

答えて

5

あなたは行うことができます修正テンフォワード、約誤りに気付いてくれてありがとう@Frank

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 
関連する問題