如何重命名列中某个值之前的n行?

时间:2018-07-27 11:37:29

标签: r

我有一个约有60000个条目的数据集和一个包含值0和1的列(2)。我想为值1之前的每12行分配值3。0和1的值不定期出现在我的数据集中。

 1. 0
 2. 0
 3. 0
 4. 0
 5. 0
 6. 0
 7. 0
 8. 0
 9. 0
 10. 0
 11. 0
 12. 0
 13. 1
 14. 0
 15. 0

在上面的示例中,我想将值3分配给1到12的行:

 1. 3
 2. 3
 3. 3
 4. 3
 5. 3
 6. 3
 7. 3
 8. 3
 9. 3
 10. 3
 11. 3
 12. 3
 13. 1
 14. 0
 15. 0

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

set.seed(123)
df <- data.frame(var1 = sample(c(0,1), 100, T, c(0.97, 0.03)))
df$var1[sapply(which(df$var1 == 1), function(x) seq(x -1, x-12))] <- 3

head(df, 25)
   var1
1     0
2     0
3     0
4     0
5     0
6     0
7     0
8     0
9     0
10    0
11    0
12    3
13    3
14    3
15    3
16    3
17    3
18    3
19    3
20    3
21    3
22    3
23    3
24    1
25    0

答案 1 :(得分:0)

使用sapply检查数据框中每一行的条件:

dt <- data.frame(x = rep(c(rep(0,15),1),5))

dt$y <- if_else(sapply(seq_len(nrow(dt)), function(x) {any(dt[(x+1):(x+12),'x']==1)}),3,dt$x)