如果满足条件,如何从upcomming行获取价值?

时间:2017-12-06 08:50:23

标签: r

我在google搜索过,但是找不到任何问题的答案。

如果符合条件,我会尝试从第一个upcomming行获取一个值。

示例:

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

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

所以我需要这样做: 迭代数据框并检查下一行直到参与等于0并从该行获得奖励并从当前行添加奖金并将其写入bonusAtNoPati。

我的问题是"检查下一行,直到参与等于0并从该行获得奖励" 我知道如何遍历整个列表但不是在当前点(行)之后 我需要对整个列表执行此过程,我可以按随机顺序获取任意随机参与值。

有谁知道如何实现它?

编辑,我还添加了另一列(" sumBonusTillParticipation = 0",只需要和值),这更难实现。 R是如此难学的语言=(

1 个答案:

答案 0 :(得分:1)

您可以使用which获取哪个行号participation为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