R 使用唯一元素值向下或向上填充向量(如na.locf)

R 使用唯一元素值向下或向上填充向量(如na.locf),r,R,我有一个大的数据框,每列包含一个来自集合{-1,1}的标志,其余的值都设置为零。我想用一个对应于该标志值的值填充或填充其余的列条目。例如,给定一个表示1列的向量,我有 v <- rep(0,15) v[12] <- 1 #I'd want a function that is something like: f <- function(v,flag){ for(i in 2:length(v)){ if(v[i-1]==flag) v[i] <- flag els

我有一个大的数据框,每列包含一个来自集合{-1,1}的标志,其余的值都设置为零。我想用一个对应于该标志值的值填充或填充其余的列条目。例如,给定一个表示1列的向量,我有

v <- rep(0,15) 
v[12] <- 1

#I'd want a function that is something like: 
f <- function(v,flag){ 
for(i in 2:length(v)){ if(v[i-1]==flag) v[i] <- flag else v[i]<-v[i]}
v
}

> v
 [1] 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
> f(v,1)
 [1] 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

v正如@G.Grothendieck评论的那样,您可以尝试
cummax
cummin
,即

f1 <- function(x){
  if(sum(x) == 1){
    return(cummax(x))
  }else{
    return(rev(cummin(rev(x)))* -1)
  }
}

#apply as usual
apply(v.mtx, 2, f1) 

f1如果您的输入是如问题中所述的全0和1的向量,则
cummax(x)
将用1替换从第一个1开始的所有内容。这就是你想要的吗?添加了更多信息以澄清。
f1 <- function(x){
  if(sum(x) == 1){
    return(cummax(x))
  }else{
    return(rev(cummin(rev(x)))* -1)
  }
}

#apply as usual
apply(v.mtx, 2, f1)