2017-12-01 3 views
0

私はRが初めてで、その癖を理解するのに苦労しています。私は本当にシンプルでなければならないことをしようとしていますが、明らかに非常に複雑になっています。R - 基本式を入力してください

私はExcel、SQL、Minitabに慣れています。ここで、他の列やパラメータへの参照を含む1つの列に値を入力できます。しかし、Rは私にこれを許可していないようです。

Iは、(現在は)4つのカラムを持つテーブルがあります。私は0.0002として割り当てられている値と、

       Date Pallets Lt Tt 
      1 28/12/2011  491 NA NA 
      2 29/12/2011  385 NA 0.787890411 
      3 30/12/2011  662 NA NA 
      4 31/12/2011  28 NA NA 
      5 01/01/2012  46 NA NA 
      6 02/01/2012  403 NA NA 
      7 03/01/2012  282 NA NA 
      8 04/01/2012  315 NA NA 
      9 05/01/2012  327 NA NA 
      10 06/01/2012  458 NA NA 

、パラメータ「ベータ」を有しています。

私がしたいことは、3行10列に数式を割り当てることです。 ベータ*(パレットt - パレットt-1)+(1-beta)* Tt t-1です。

私は、適切なコードがあるかもしれないことを考えた:

Table[3:10,4]<-beta*(Table[3:10,"Pallets"]-Table[2:9,"Pallets"])+(1-beta)*Table[2:9,"Tt"] 

しかし、これは動作しません。私はこの数式を入力する最初の時間は、それが生成されます。

Date Pallets Lt  Tt 
      1 28/12/2011  491 NA  NA 
      2 29/12/2011  385 NA 0.7878904 
      3 30/12/2011  662 NA 0.8431328 
      4 31/12/2011  28 NA  NA 
      5 01/01/2012  46 NA  NA 
      6 02/01/2012  403 NA  NA 
      7 03/01/2012  282 NA  NA 
      8 04/01/2012  315 NA  NA 
      9 05/01/2012  327 NA  NA 
      10 06/01/2012  458 NA  NA 

だから、それはシリーズの2番目の項目のためではなく、その後の値のいずれかのために正しい答えを生成しています。

Excelが実行するように、Rは各行を自動的に更新せず、お互いの行との関係を自動的に更新しないように見えます。 Excelが実際にはセル[4、Tt]の式を入力してから、これを他のセルのすべてにドラッグする必要があります。おそらくRは同じで、私がする必要のある「下にドラッグ」するのと同等のものがありますか?

最後に、ベータパラメータの値を変更すると、 beta<-0.5を入力して、テーブルの値をもう一度表示すると、それらは変更されないため、パラメータの値を変更してもテーブルは更新されません。

これらは基本的な質問ですが、私はRでR.

答えて

2

に非常に新しいです、計算は「セルによる細胞」行われていませんが、ベクトル化されていることを理解する - あなたの例では、Rは、ベクトルを取るTable[3:10,"Pallets"]Table[2:9,"Pallets"]およびTable[2:9,"Tt"]を現時点でそのまま使用し、結果のベクトルを計算し、最後にTable[3:10,4]に割り当てます。

あなたには、いくつかの計算「セルごと」にしたい場合は、あなたがforループを使用する必要があります。

beta <- 0.5 
df <- data.frame(v1 = 1:12, v2 = 0) 
for (i in 3:10) { 
    df[i, "v2"] <- beta * (df[i, "v1"] - df[i-1, "v1"]) + (1 - beta) * df[i-1, "v2"] 
} 
df 
    v1  v2 
1 1 0.0000000 
2 2 0.0000000 
3 3 0.5000000 
4 4 0.7500000 
5 5 0.8750000 
6 6 0.9375000 
7 7 0.9687500 
8 8 0.9843750 
9 9 0.9921875 
10 10 0.9960938 
11 11 0.0000000 
12 12 0.0000000 

それはあなたの2番目の質問に来るように、Rは、自分自身で任意の値を更新することはありません( Excelで手動計算を設定したと想像してください)。したがって、ベータ版を変更した後で計算を繰り返す必要があります。

+0

感謝を非常に明確にし、良い答えを。では、Excelで値が互いに異なる2つの列がある場合はどうすればよいですか? Excelでは、列1に数式を入力してドラッグし、列2に数式を入力してドラッグすると、Excelはすべてのセルの値に応じて両方の列の値を自動的に更新します。 Rでこれをどのように達成するでしょうか? – Statsanalyst

+0

助けてくれてうれしいです。 Rや他のプログラミング言語はそうした方法では機能しません。あなたは結果を見るために通訳者にコードを "送る"必要があります。 – MRau

1

それは一般的に悪いデザインだが、あなたはループ内の行を反復処理することができますが:

Table$temp <- c(0,diff(Table$Palletes,1)) 
prevTt = 0 

for (i in 1:10) 
{ 
    Table$Tt[i] = Table$temp * beta + (1-beta)*prevTt 
    prevTt = Table$Tt[i] 
} 

Table$temp <- NULL 
+0

丁寧な答えですが、すでに以下の回答を答えにしています。 – Statsanalyst

関連する問題