我有一个 Dataframe ,其中一些行的值为0。我想做一个代码,使接下来的几行也为0。
> head(df$n,n=20)
df$n
1 0
2 9009
3 0
4 0
5 0
6 0
7 0
8 5410
9 0
10 0
11 0
12 0
13 0
14 0
15 32
16 0
17 0
18 1054
19 0
20 0
我想创建一个代码,将值为0的下五行转换为0。基本上,值为0的行是0,下五行也是0。
我试过了
for(j in 1:nrow(indx)){
for(i in 1:4){
df$n[j+i]<-0
}
}
其中indx是包含所有0值行号的 Dataframe 。
这可以工作,但不正确。
如何获得所需的输出?
> head(df$n,n=20)
df$n
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 5410
9 0
10 0
11 0
12 0
13 0
14 0
15 32
16 0
17 0
18 0
19 0
20 0
编辑:抱歉语言不清楚。我的目标是将0后面的5个值转换为0。因为这是不正确的数据。
编辑2:我想这段代码对我有用。它有点原始。
for( i in 1:nrow(indx)){
u<-indx[i,]
df[u,]<-0
df[u+1,]<-0
df[u+2,]<-0
df[u+3,]<-0
df[u+4,]<-0
df[u+5,]<-0
}
然而,它在末端引入额外的行,但是它工作。
1条答案
按热度按时间tp5buhyn1#
如果我没理解错的话,你需要确保任何一串零都至少有5行长,除非它在数据的末尾。
为了更好地演示该方法,我在helper列中保留了这些内容,但是您可以通过使用
n = ifelse(...)
代替n_new = ifelse(...)
并添加select(!zeros_run:zeros_consecutive)
来删除这些内容。