我有一个像这样的字符串:
string <- c("1","2","3","","5","6","")
我想用以前的值替换间隙,获得类似于以下的字符串:
string <- c("1","2","3","3","5","6","6")
我已经调整了此解决方案(Replace NA with previous and next rows mean in R),但确实得到了正确的结果:
string <- as.data.frame(string)
ind <- which(string == "")
string$string[ind] <- sapply(ind, function(i) with(string, string[i-1]))
但是,这种方法非常麻烦,并且必须有一种更简便的方法,不需要我先将字符串转换为数据帧。谢谢你的帮助!
答案 0 :(得分:4)
将空白(na.locf
)更改为zoo
后,我们可以使用""
中的NA
,以便将NA值替换为非NA相邻的先前值< / p>
library(zoo)
na.locf(replace(string, string =="", NA))
#[1] "1" "2" "3" "3" "5" "6" "6"
如果元素之间至少有一个空白,则按照OP的职位创建索引,然后用与索引减去1对应的元素进行替换
i1 <- which(string == "")
string[i1] <- string[i1-1]