2017-08-03 6 views
0

dplyrパッケージに基づいて関数を作成しようと考えていました。 janitorパッケージやOrganism.dplyrなどの例はほとんど見ていません。しかし、私はdplyrの機能を拡張したり固有のものにすることはできないか、可能であってもわかりません。dplyrベースの関数を作成する

たとえば、私が何をしたいです:それについて

データ%>%GROUP_BY(COLUMNX)%>%my_mutate_like_function()

しかし、それは動作しません、私が見たポストを代替のようにしてください()を使用して... しかし、それは私が望むものではありません。

誰でもお手伝いできますか?ありがとう。

==この質問によるとコード例(編集後)==

data <- data.frame(groupname = c('A', 'B', 'A', 'A', 'B', 'B'), 
        value = c(1, 3, 4, 2, 1.4, 5)) 

my_mutate_like_function <- function(data) { 
    data$category <- ifelse(data$value <= mean(data$value), 'In', 'Out') 
    data$meanvalue <- mean(data$value) 
    data 
} 

data_works <- data %>% group_by(groupname) %>% 
    mutate(category = ifelse(value <= mean(value), 'In', 'Out'), meanvalue = mean(value)) 
# That's the right output, each "groupname" had their average calculated and it was used a threshold value 

data_fails <- data %>% group_by(groupname) %>% 
    my_mutate_like_function() 
# The group_by properties seems not work inside my function 
+2

あなたはデータサンプルと期待される出力と一緒に動作しないコードを表示することができますか? – eipi10

+0

コード例を追加しました。 – andrefonseca

+0

申し訳ありませんが、これは愚かなコメントですが、関数内でdplyrを使用しているだけの場合、つまりラッパーはどうでしょうか?またはあなたの関数の中で "baseRのアプローチ"を使用したいですか? – friep

答えて

0

に従うdplyr::mutate to add multiple values dplyrに一つの機能における2つの戻り値を取得するためないエレガントな方法は存在しません。 group_byを利用するには、mutateが関数を新しい関数に渡す前にmutateが適切に処理するので、私は関数をmutate()で囲むだけでそれを動作させることができました。これを見えるようにするためにaを追加しました。

print(mean(value)) 

ので、可能な解決策は、次のようになります。

my_mutate_like_function1 <- function(value) { 

    ifelse(value <= mean(value), 'In', 'Out') 
} 


my_mutate_like_function2 <- function(value) { 
    print(mean(value)) 
    mean(value) 
} 


data %>% group_by(groupname) %>% 
    mutate(category=my_mutate_like_function1(value),meanvalue=my_mutate_like_function2(value)) 
関連する問題