2017-03-08 5 views
1

私は、dplyr :: mutate()の関数に渡された変数の名前を抽出しようとして失敗しています。以下は私がのmutate内の文字列「MPG」を返す関数を作成する簡単な例です:R dplyr - mutate/summarizeの文字列として変数名を取得

# mtcars dataset with grouping variable 
dataset = mtcars 
dataset$group = c(1, 2, 3, 4) 

# function to call inside mutate() 
f = function(col, data){ 
    str_col = deparse(lazyeval::expr_find(col)) 
    str_col 
} 

# this does not work: returns the content of mpg 
# instead of the variable name as a string 
dataset %>% 
    group_by(group) %>% 
    mutate(f = f(mpg, dataset) 
) %>% 
    select(group, f) 

私はlazyeval使用:: expr_find()、subsituteのみ限り一つの層を「上がる」ので、私はその文書を理解した。関数wrap()内でf()を呼び出すと動作しますが、group_by()%>%mutate()の中に入れると、mpgの代わりにmpgの内容を返します。

いくつかの質問が関連していますが、それらのどれも私の問題を解決するものではありません。大歓迎

すべてのヘルプ:)

+1

f_updatedは、単純に1の値を生成するために起こっていますグループ合計を合計で除算しようとしているようですね。 % dplyr :: select(mpg、group)%>% mutate(tot.sum = sum(mpg))%>% group_by(group)%>% 要約(結果 –

+0

私のテキストがちょっと誤解を招いていたことを心配しています。sum(mpg)/ sum(。$ mpg)はすでにトリックをしていますが、それはちょっと小さかった私は同じ出力を取得するかどうかを確認する例です。私の問題は、mutate()の関数に渡すと文字列として変数名を取得したいのですが、それはまだ動作していません:(でもthxですが!) – Christoph

+1

本当の質問が何であるか分かりません –

答えて

1

私はまだあなたがやろうとしているもので、完全に明確ではないんだけど、多分これは役立ちます:

f = function(col, data){ 
    str_col = deparse(substitute(col)) 
    data.frame(str_col) 
} 

dataset %>% 
    group_by(group) %>% 
    do(f(mpg, .)) 
+0

Thx、混乱して申し訳ありません...私がしたいのは、関数faの列名とデータフレームをmutate内に渡したいです。基本的に、私はこれを呼びたいので、私はGROUP_BY 内の元のデータフレームの列を操作することができます[col_name_as_string、](dplyrは、非標準の評価を使用しているため)文字列に列名を解析し、データフレームを行うためにそれを使用関数: f = function(col、data){ str_col = deparse(代用(col)) 合計(COL)/データ[str_col] }が、逆パース(代替())部分はのmutate内部変数名を返していないので、それは、残念ながら動作しません – Christoph

関連する問題