R 使用唯一元素值向下或向上填充向量(如na.locf)
我有一个大的数据框,每列包含一个来自集合{-1,1}的标志,其余的值都设置为零。我想用一个对应于该标志值的值填充或填充其余的列条目。例如,给定一个表示1列的向量,我有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
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)