2017-11-20 7 views
1

私は2つの変数siteとpurchaseを持つデータフレーム(df)を持っています。dplyr()で行を追加するtransform()

dplyr()を使用してサイトでデータをグループ化して購入し、グループ化されたデータの数と割合を取得したいと考えています。私はまた、購入によってグループ化されたすべてのサイトのデータを表すALLSITESというローをフィーチャーにすることをお勧めします。そうすれば、dfgoalに似たようなチブルになります。

問題は、私の現在のコードは私にALLSITESの行を取得しないということです。私は基底のR関数をdplyr()に追加しようとしましたが、これはうまくいきません。

ご協力いただければ幸いです。

始点(DF):

df <- data.frame(site=c("LON","MAD","PAR","MAD","PAR","MAD","PAR","MAD","PAR","LON","MAD","LON","MAD","MAD","MAD"),purchase=c("a1","a2","a1","a1","a1","a1","a1","a1","a1","a2","a1","a2","a1","a2","a1")) 

所望の結果:

dfgoal <- data.frame(site=c("LON","LON","MAD","MAD","PAR","ALLSITES","ALLSITES"),purchase=c("a1","a2","a1","a2","a1","a1","a2"),bin=c(1,2,6,2,4,11,4),pin_per=c(33.33333,66.66667,75.00000,25.00000,100.00000,73.33333,26.66666)) 

現在コード:

library(dplyr) 
    df %>% 
    group_by(site, purchase) %>% 
    summarize(bin = sum(purchase==purchase)) %>% 
    group_by(site) %>% 
    mutate(bin_per = (bin/sum(bin)*100)) 

    df %>% 
    rbind(df, transform(df, site = "ALLSITES") %>% 
    group_by(site, purchase) %>% 
    summarize(bin = sum(purchase==purchase)) %>% 
    group_by(site) %>% 
    mutate(bin_per = (bin/sum(bin)*100)) 
+0

次いで' DF1%>%グループ解除(仮定結合)%>%GROUP_BY(サイト= 'ALLSITES'、購入)%> bin_per = 100 *(bin/sum(bin)))%>%bind_rows(df1、。) '% – akrun

答えて

1
我々によりグループ化した後、最初の出力コードブロックから開始することができる

「サイト」に「ALLSITES」と「購入」という文字列が作成され、sumの「bin」とそれ以降の「bin」 _per」、次いでbind_rows行と `df1`が第一の出力であれば2つのデータセット

df1 %>% 
    ungroup() %>% 
    group_by(site = 'ALLSITES', purchase) %>% 
    summarise(bin = sum(bin)) %>% 
    ungroup %>% 
    mutate(bin_per = 100*(bin/sum(bin))) %>% 
    bind_rows(df1, .) 
関連する問題