2017-11-02 12 views
0

dplyrを複数回使用して同じ操作をデータセットに対して実行したいと考えています。私が操作を実行するたびに、私はgroup_by()という異なる列のセットが必要です。これは簡単な例ですが、私は、単にいくつかのコンテキストとしてdplyr-esque集計操作をグループ化したりグループ化したりしないで実行する

library(dplyr) 
mtcars %>% 
    group_by(cyl, gear) %>% 
    summarise(`Mean mpg` = mean(mpg), 
       `Mean hp` = mean(hp)) 

mtcars %>% 
    group_by(cyl) %>% 
    summarise(`Mean mpg` = mean(mpg), 
       `Mean hp` = mean(hp)) 

:私はこれが最もdplyr風の道(最適に、コピーせずに、コードまたは別の中間オブジェクトを作成し貼り付け)でどのように行うのですか階層化されたデータや階層化されていないデータよりもロジスティック回帰モデルを実行するために、はるかに長い関数パイプラインを実行しているかもしれないインスタンスにその使用法を拡張することにもっと興味があります...しかし、それは疑問の対象外です。

+0

私はあなたが既にコード化したものを超えて何を求めているのか分かりません。 – ssp3nc3r

+0

のように、テキストをコピーして貼り付けることなくこれを行うエレガントな方法があります。繰り返しますが、これは簡単な例です。 – graggsd

+0

「これ」とは何ですか?あなたは何を抽象化しようとしているのですか? – ssp3nc3r

答えて

3

グループの番号がわからないwの場合は、1つのオプション...を使用することですが(多くのソリューションがあるかもしれないがmeanを取得するための変数は、同じ

再び
f1 <- function(dat, ...){ 
    dat %>% 
     group_by_at(vars(...)) %>% 
     summarise_at(vars('mpg', 'hp'), funs(Mean = mean(.))) 
    } 

f1(mtcars, 'cyl', 'gear') 
# cyl gear mpg_Mean hp_Mean 
# <dbl> <dbl> <dbl> <dbl> 
#1  4  3 21.500 97.0000 
#2  4  4 26.925 76.0000 
#3  4  5 28.200 102.0000 
#4  6  3 19.750 107.5000 
#5  6  4 19.750 116.5000 
#6  6  5 19.700 175.0000 
#7  8  3 15.050 194.1667 
#8  8  5 15.400 299.5000 


f1(mtcars, 'cyl') 
# A tibble: 3 x 3 
# cyl mpg_Mean hp_Mean 
# <dbl> <dbl>  <dbl> 
#1  4 26.66364 82.63636 
#2  6 19.74286 122.28571 
#3  8 15.10000 209.21429 
+1

これは興味深い解決策です。私は、dplyr関数のスコープ付きバリアントのそれぞれを使用する異なる状況を完全には理解していません。これは、使用中のgroup_by_atを初めて見たときです。 – graggsd

0

であると仮定すると。次のように質問は、私が気づくに失敗していたdplyrに組み込まれたいくつかの方法があった場合、私はこれについて行くために、よりエレガントな方法で提案を探していた/不思議に思った、上記提起

別の可能な解決策は、次のとおりです。

mtcars.2 <- mtcars %>% 
    mutate(gear = as.character(gear)) 

mtcars.2 <- bind_rows(mtcars.2, 
         mtcars.2 %>% 
          mutate(gear = "All gears")) 

mtcars.2 %>% 
    group_by(cyl, gear) %>% 
    summarise(`Mean mpg` = mean(mpg), 
       `Mean hp` = mean(hp)) 
関連する問題