我在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是如此难学的语言=(
答案 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