2017-07-14 10 views
0

データフレームに新しい変数を作成しようとしています(新しい列を作成しています)。値は観測ごとに異なって計算されますので、私はそれをループに使用しました。私は、データフレームREPLICに追加しようとしている新しい変数がPL値を新しい変数に設定する

REPLIC$PL <- for (i in 1:ncol(REPLIC)) if (REPLIC$FTR[i]=="D") { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*REPLIC$max[i])} else { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*-1}

と呼ばれているとしましょう、私はまた、機能

を適用しようとしたのmutate

REPLIC <- mutate(REPLIC, PL = for loop goes here)

を使用して試してみました

REPLIC$PL <- apply(REPLIC,1, for loop here)

I私はRに新しいが、私は実際に私がここで欠けているものを得ることはありません。これまで管理してきた唯一のことは、グローバル環境でPL値を作成することです。もし誰かが教えてくれたら本当に嬉しいです。

答えて

0

ここでループを使う必要はなく、すべてベクトルを使って行うことができます。 あなたのデータについて何も共有していないので、私はいくつか前提をしなければなりません。

#create fake data 

starting_budget <- 1000 

REPLIC <- data.frame(FTR = c(rep('D',5),rep('A',5)),f_of_bet = runif(10),max=runif(10)) 

> REPLIC 
    FTR f_of_bet  max 
1 D 0.78590664 0.3620227 
2 D 0.15498935 0.4921082 
3 D 0.20469729 0.5597419 
4 D 0.01167919 0.3677215 
5 D 0.32862533 0.5531767 
6 A 0.52029750 0.5391566 
7 A 0.63206626 0.9727405 
8 A 0.54632605 0.7221810 
9 A 0.58939969 0.6103260 
10 A 0.15375445 0.1996567 

次のコードは、新しい列を追加します。あなたはFTR上の条件を持っているので、私はifelseを使用しています:

REPLIC$PL <- ifelse(REPLIC$FTR == 'D', 
        REPLIC$f_of_bet * starting_budget * REPLIC$max, 
        REPLIC$f_of_bet * starting_budget * -1) 

これがあなたに与えます:

> REPLIC 
    FTR f_of_bet  max   PL 
1 D 0.78590664 0.3620227 284.51602 
2 D 0.15498935 0.4921082 76.27153 
3 D 0.20469729 0.5597419 114.57764 
4 D 0.01167919 0.3677215 4.29469 
5 D 0.32862533 0.5531767 181.78787 
6 A 0.52029750 0.5391566 -520.29750 
7 A 0.63206626 0.9727405 -632.06626 
8 A 0.54632605 0.7221810 -546.32605 
9 A 0.58939969 0.6103260 -589.39969 
10 A 0.15375445 0.1996567 -153.75445 
+0

をすごいああ!ソリューションがとてもシンプルになるとは思わなかった。今までのifelse機能については知らなかった。どうもありがとう!! btw - forループに関しては、どこかで 'break'を使う必要がありますか、それともデータフレームの完成後に停止するだけですか? –

+0

forループは、入力として得られたすべての要素を反復すると終了します( '' 1:ncol'はすべての列インデックスをループします)。 'break'を追加すると、ループは完全にその時点で停止します遭遇した。 – Val

関連する問題