R 如果满足条件,如何从提交行中获取值?

R 如果满足条件,如何从提交行中获取值?,r,R,我在谷歌上搜索,但找不到我问题的答案 如果满足条件,我会尝试从第一个提交行获取一个值 例如: Pupil participation bonus 2 55 6 2 33 3 2 88 9 2 0 -100 2 44 4 2 66 7

我在谷歌上搜索,但找不到我问题的答案

如果满足条件,我会尝试从第一个提交行获取一个值

例如:

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是一种非常难学的语言=(

您可以使用
哪个
来获得哪个行号
参与
为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

df这个回答OP有什么问题?它似乎重现了你想要的结果。我没有完全得到上面的评论。如果这个答案在某些情况下不起作用,请展示这种情况编辑你的问题。嘿,尼古拉,米因卡斯刚刚编辑了他的答案,别担心=)@fReezMA你应该给出反馈。如果这个答案对你有帮助,请投赞成票或接受它(或两者兼而有之)。至少,你应该说它是否解决了你的问题。这里的人们为你和社区贡献了一部分时间,你至少应该给出一些反馈。我想我问了一个错误的问题,但是你的代码似乎起作用了。我投票并接受它,这样其他有同样问题的人就可以利用你的指导来解决它。非常感谢。
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