2016-04-08 23 views
-1

IがI [i]が(私は、C [I] =のFUNCことをSTAT.VECTORSカラムCを追加する必要がある2つの列AおよびB 有するデータフレームSTAT.VECTORSを有するRR:他の列の値に基づいて列を計算する方法は?

に新しい午前、B [i])

Rでこれを行う最も構文的に効率的な方法は何ですか? C [I] =のFUNC(A [I-1]、B [I-2])現像背景を持つ

、Iはループを作成して値を割り当てることになるように溶液を延長する

任意の方法C.に私はR :)

UPDATE

私の質問に手の込んだする必要があり、次の例から、より良い期待しています。ループは、現在の行を基準にして特定の要素を選択し、それらを関数に渡します。

適用ファミリを使用してループなしで以下のループロジックを実行できますか?

l=50 

func=function(x,y){return(y-x)} 

a=sample(1:6,l,replace = T) 
b=sample(1:6,l,replace = T) 
c=sample(1:6,l,replace = T) 
d=sample(1:6,l,replace = T) 
e=sample(1:6,l,replace = T) 
f=vector("numeric",l) 
test.data = cbind(a,b,c,d,e,f) 

for(i in 2:l) 
{ 
    test.data[i,"f"]= func(test.data[i,"d"],test.data[i-1,"b"]) 
} 
test.data 
+0

は、基本的には、[ファミリを適用](http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-を検討する必要がありますvs-by-vs-aggrega)関数 – Sotos

+0

@Sotos:apply family関数で要件を処理する方法を見つけることができません。関数applyは、どの正確な要素インデックスが関数パラメータになるかを選択することはできません。私の場合、f(a、b)!= f(b、a)TheRimalayaへの私の返信を参照してください –

+0

必要なインデックスを持つ別々のベクトルを作成し、 'apply'関数で使用するかもしれません。問題の詳細と具体的な例を提示しない限り、私たちはあなたをさらに助けることはできません。 – Sotos

答えて

0

私は、これはabの合計と列cを追加します

dfx <- data.frame(a = sample(15), b = sample(15)) 

dfx$c <- apply(dfx, 1, sum) 

、としてdata.frameを作成しました。 sumの代わりに、ある範囲の値をとり、単一の出力を持つ関数を置くことができます。

dfx$c <- apply(dfx, 1, <some fun>) 
+0

関数sumは私の関数の良い代表ではありません。私の関数は範囲を取らず、f(a、b)!= f(b、a)です。私はパラメータを制御する必要があります。適用可能な能力はありますか? –

+0

あなたの機能についてもう少し詳しい説明をしなければなりません。そうしなければ、あなたを助けるのが難しくなります – TheRimalaya