2017-12-06 11 views
1

Googleで検索しましたが、私の質問に対する回答が見つかりませんでした。条件が満たされた場合、アップコム行から値を取得するにはどうすればよいですか?

条件が満たされていれば、最初の上昇している行から値を取得しようとします。

例:

Pupil participation bonus bonusAtNoParti sumBonusTillParticipation=0 
    2   55   6   -94     6+3+9 = 18 
    2   33   3   -97      3+9 = 12 
    2   88   9   -91      9 
    2   0   -100  0      0 
    2   44   4   -29      4+7=11 
    2   66   7   -26      7 
    2   0   -33   0      0 

Pupil participation bonus 
    2   55   6 
    2   33   3 
    2   88   9 
    2   0   -100 
    2   44   4 
    2   66   7 
    2   0   -33 

だから私はこの実行する必要があります。データフレームを通じて 反復をし、参加は0に等しいまで次の行をチェックして、そのラインからのボーナスを取得し、現在の行からボーナスを追加し、bonusAtNoPatiに書き出します。

ここに私の問題は、私はリスト全体を反復処理する方法を知っているが、現在のポイント(行) 後、私はする必要がありません 「参加は0に等しいまで次の行をチェックして、その行からボーナスを得る」でありますランダムな順序で任意のランダムな参加値を得ることができるリスト全体にこのプロセスを実行します。

これを実現する方法はありますか?

編集私はさらに、実現することがさらに困難な別の列(「sumBonusTillParticipation = 0」、合計値のみが必要)を追加しました。 Rは

答えて

1

(言語=を学ぶことは、このような難しいです、あなたは数participationこの回答OPと間違って何0

df <- read.table(text = 'Pupil participation bonus 
      2   55   6 
      2   33   3 
      2   88   9 
      2   0   -100 
      2   44   4 
      2   66   7 
      2   0   -33', header = T) 

index <- c(0, which(df$participation == 0)) 
diffs <- diff(index) 
df$tp <- rep(df$bonus[index], times = diffs) 
df$bonusAtNoParti <- df$bonus + df$tp 
df$bonusAtNoParti[index] <- 0 
df$tp <- NULL 

    Pupil participation bonus bonusAtNoParti 
1  2   55  6   -94 
2  2   33  3   -97 
3  2   88  9   -91 
4  2    0 -100    0 
5  2   44  4   -29 
6  2   66  7   -26 
7  2    0 -33    0 
+0

ある行?あなたの所望の出力を再現しているようです取得するwhichを使用することができます。Iドン – nicola

+0

こんにちはnicola、myincasはちょうど彼の答えを編集しました、心配しないで=) – fReezMA

+0

@fReezMAあなたはフィードバックを与える必要があります。この回答があなたに役立った場合は、upv​​oteまたはaccept(またはその両方)をしてください。少なくとも、それがあなたの問題を解決したかどうかを言わなければなりません。ここの人々は、あなたとコミュニティのための時間の一部を与えています。そして、あなたは少なくともいくらかのフィードバックを与えるべきです。 – nicola

関連する問題