2017-07-20 16 views
1

dplyrのdo()に渡すカスタム関数を記述しようとしています。最終的な目標は、カスタム関数を別々のデータで実行するためにgroup_by()に加えてそれを使用することです。ここで外部のカスタム関数からdplyrでグループ化されたデータにアクセスする


は私のデータセットが

> head(data,4) 
     subject ps polarity  rs log_rs 
    1 Danesh 1.0 regular 216.0000 5.375278 
    2 Danesh 0.9 regular 285.7143 5.654992 
    3 Danesh 0.8 regular 186.3354 5.227548 
    4 Danesh 0.7 regular 218.1818 5.385329 

そして、このデータセットを生成するコードのようになります。

data <- structure(list(subject = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("ChristinaP", 
    "Danesh", "Elizabeth", "Ina", "JaclynT", "JessicaS", "Rhea", 
    "Samuel", "Tyler", "Vinodh"), class = "factor"), ps = c(1, 0.9, 
    0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 1, 0.9, 0.8, 0.7, 0.6, 
    0.5, 0.4, 0.3, 0.2, 0.1), polarity = structure(c(1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L), .Label = c("regular", "reverse"), class = "factor"), rs = c(216, 
    285.714285714286, 186.335403726708, 218.181818181818, 183.673469387755, 
    194.174757281553, 202.020202020202, 184.615384615385, 153.452685421995, 
    191.693290734824, 216, 285.714285714286, 186.335403726708, 218.181818181818, 
    183.673469387755, 194.174757281553, 202.020202020202, 184.615384615385, 
    153.452685421995, 191.693290734824), log_rs = c(5.37527840768417, 
    5.65499231048677, 5.22754829565983, 5.38532874353767, 5.21315955820773, 
    5.26875856430649, 5.30836770240154, 5.2182746588745, 5.03339228121887, 
    5.25589665066408, 5.37527840768417, 5.65499231048677, 5.22754829565983, 
    5.38532874353767, 5.21315955820773, 5.26875856430649, 5.30836770240154, 
    5.2182746588745, 5.03339228121887, 5.25589665066408)), class = "data.frame", 
    row.names = c(NA, -20L), .Names = c("subject", "ps", "polarity", "rs", "log_rs")) 

と最終呼び出しのようになります。

temp_df <- data %>% 
    group_by (subject, polarity) %>% 
    do (customFun(.$ps, .$rs)) 

私のカスタム関数は、変数psの値に基づいて選択された行のサブセットでmax(rs)を計算することのうち、多くのことを行います(ここでは説明を省略します)。言い換えれば、私はpsが2行目のpsよりも小さいか5行目のpsよりも大きい行だけを保持し、このダミーの例のように、これらの選択された行のmax rsを計算します。

customFun <- function(df, ps, rs) { 

    omax = df %>% 
     filter (ps < ps[2] | ps > ps[5]) %>% 
     summarise (max(rs)) 

    } 

問題は、この関数をgroup_by()サブデータフレーム内に渡したいので、私の関数で呼び出されたデータフレームに特定の名前を付けることができません。代わりに、私は関数が現在のデータのチャンクで自動的に動作するはずであることを知りたい。私はのようなものを試みた:

omax = . %>% 
     filter (ps < ps[2] | ps > ps[5]) %>% 
     summarise (max(rs)) 

そして他の多くのバリエーションを、何も動作するようには思えません...私はhereのように、オンラインいくつかの同様の質問を見つけましたが、それでもそれを把握することができませんでした。どのようにこの問題を解決するためのヘルプ/ヒント? ありがとう!

答えて

0

私は私の質問here

カスタム機能への答えが見つかりました:

customFun <- function(df, ps, rs) { 
    omax = df %>% 
     filter (ps < ps[2] | ps > ps[5]) %>% 
     summarise (max(rs)) 
    } 

FINAL CALL:

temp_df <- data %>% 
    group_by (subject, polarity) %>% 
    do (customFun(., .$ps, .$rs)) 
関連する問題