2012-05-11 17 views
0

一般的なスプレッドシートでは、どの行のセルも参照する数式を作成できます。データフレームの複数の行にまたがる計算

だから、私たちは、私は次のようなデータを持っているとしましょう:

a=1:10 
b=11:20 
c=data.frame(a,b) 

この生み出すことになる:私は絶対式c$b2*c$a1セルc2がどうなるかに置くことができ、スプレッドシートでそう

a b 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 
6 6 16 
7 7 17 
8 8 18 
9 9 19 
10 10 20 

を番号12を取得します。または、相対参照を使用するifelse(c$a>5,c$b*c$a[-1]*2,c$b*c$a[-1]のようなもっと複雑なものでも可能です。

a b c 
1 1 11 NA 
2 2 12 12 
3 3 13 26 
4 4 14 42 
5 5 15 60 
6 6 16 80 
7 7 17 204 
8 8 18 252 
9 9 19 304 
10 10 20 360 

私は、Rは、スプレッドシートではありませんが、私はこのようにしてデータフレームを処理できるようになるパッケージや機能があるかの機能のようなものとは根本的に間違って何かがあると知っていますか?私は、複数のレコードや行にまたがる必要がある関数について、これらの問題を抱えています。私が扱うほとんどのものは、それがまったく役に立ったら時系列です。そのような機能を説明する文書はどこにありますか?たぶんどこかで逃した?topicがあります。

答えて

2

あなたが接近していた、あなたはifelseにすべてのことをラップ、その後、最初と最後の値を除外することで相殺完了する必要があります。

a = 1:10 
b = 11:20 
d = data.frame(a,b) 
d$c = ifelse(d$a > 5, c(NA, d$b[-1] * d$a[-nrow(d)]) * 2, c(NA, d$b[-1] * d$a[-nrow(d)])) 

cは非常に一般的であるので、(私は変数名としてdを選択します使用する関数)

整然と答えをifelseのうち、主な計算を維持し、乗算器のみのためにそれを使用します。

d$c = ifelse(d$a > 5, 2, 1) * c(NA, d$b[-1] * d$a[-nrow(d)]) 
+0

それで '-1]は-1レコードではないことを表していますか?そして、もし私が2行を乗算したいなら、 '-2nrow(d)'を行い、forwardは '+ nrow(d)'でしょうか?私は 'nrow'を見上げて、これについて何も言わない?どのようにこれを知っていますか? – thequerist

+2

負のインデックスは、指定されている以外のすべての要素を示します。私はこれを知っています。なぜなら、Introduction to Rのセクション2.7とヘルプは? ""(または?Extract)です。 – mdsumner

関連する問題