2017-02-14 6 views
0

私は、変換関数の一部を変数入力で置き換えたいと考えています。関数の一部を変数入力で置き換える

私は、既存のテーブルからCOL1とのサブセットを使用してDFを作成した

col1 = c('A','B','C') 

DFは、このようなものになります。

A = c(1, 3) 
B = c(3, 1) 
C = c(5, 2) 
df = data.frame(A, B, C) 

を私は今、手動で次のようになり、計算を自動化したいですこれは:

df <- transform(df, 'ABC' = (A + B + C)) 

ここで(A + B + C)はdfの列を参照します。私は何百ものcol1を持っているので、私は手でそれをすることはできません。私は%s(Python 2.Xで利用可能)と同様のものを使用しようとしていましたが、実際には何も機能していませんでした。 .formula、sprintf、substituteなど)。

私は変換関数の中に出力を貼り付けようとしていますが、as.formulaを使用するときは、環境(列ではない)から値を取得しようとしています。

cv = function(var){ 
    output = paste('(', paste(var, collapse = ' + '), ')', sep = '') 
    return(output) 
} 

ヒントやアイデアはありがたいですか?

答えて

2

あなたは奇妙なコーナーに身を任せました。

cols <- c("A", "B", "C") 
df[, paste(cols, collapse = "")] <- rowSums(df[, cols]) 
#alternatively for other binary functions: 
#Reduce("+", df[, cols]) 
# A B C ABC 
#1 1 3 5 9 
#2 3 1 2 6 
+0

ああ、ありがとうございました! – Daan11

+0

'Reduce'ソリューションは素晴らしいです。 –

0

あなたはdplyrからmutateを使用しても同様の効果を得ることができます:これはRと簡単です。ここ

library(dplyr) 
cols <- c("A", "B", "C") 
df %>% mutate_(.dots = setNames(paste(cols, collapse = '+'), 
           'new_column_name')) 

は、我々は(_をスポット)mutate_を伝える"A+B+C"を生み出すpaste()を経由して何をすべきか、とsetNamesを使用して新しい列に名前を付けます。

文法は多少複雑ですが、これはnon-standard evaluationdplyrに関連しています。しかし、dplyrエコシステムでこれを実行したい場合は、これがその方法です。

関連する問題