2017-02-05 11 views
-1
a<-data_frame(id=c(rep("A",100),rep("B",78),rep("C",50)), 
       vall=c(rep("x",100),rep("y",78),rep("x",50)), 
       val=runif(228)) 

、I'dは、次のような出力を持っているのが好き:表とGROUP_BY今

a2<-a %>% group_by(id) %>% count(vall) 
table(a2$vall) 

しかし、I'dはonelinerを持っていることを好むとa2を作成する必要がありません。これを行うスマートな方法はありますか?

+4

「a2」を作成する代わりにパイプを使用し続けることができないのはなぜですか?例えば、 'count(a、vall、id)%>%count(vall)'のように? –

+2

または、本当に 'table'を使いたいなら'%%>%count(vall、id)%>%{table(。$ vall)} ' – Axeman

+0

を実行できます。 @DavidArenburg - 私はカウントが混ざっているので、間違った出力を得ました。 @Axeman - 私は同じことをしましたが、{}を除いて 'Error in sort.list(y)'を取得しました。 {}の論理は何ですか? – Misha

答えて

0

とAkruns答えは結構ですが、質問はdplyrのためでした。私は完全性のためにここのコメントセクションから代替案を貼り付けました。

a %>% count(vall, id) %>% {table(.$vall)} 

count(a, vall, id) %>% count(vall) 
0

これは、新しいテーブルを作成せずに、またはテーブル機能を使用せずに、必要な出力を得ます。しかし、出力レイアウトが若干異なります。

library(tidyverse) 
a %>% group_by(id) %>% count(vall) %>% group_by(vall) %>% count() 

は全くその助けをしていますか?ここで

0

はワンライナーdata.table

library(data.table) 
setDT(a)[, .N, .(id, vall)][, .N , vall]