用先前的值替换字符串中的元素

Replacing an element in a character string by the previous value

我有一个这样的字符串:

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]))

不过这种方法比较麻烦,一定有更简单的方法,不需要我先将字符串转换为数据框。谢谢你的帮助!

我们可以在将空白 ("") 更改为 NA 之后使用 zoo 中的 na.locf,以便 NA 值被非 NA 相邻的前一个值替换值

library(zoo)
na.locf(replace(string, string =="", NA))
#[1] "1" "2" "3" "3" "5" "6" "6"

如果元素之间最多只有一个空格,则按照OP的post创建一个索引,然后用索引减去1

对应的元素进行替换
i1 <- which(string == "")
string[i1] <- string[i1-1]