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

时间:2019-02-04 15:43:27

标签: r character sapply

我有一个像这样的字符串:

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

但是,这种方法非常麻烦,并且必须有一种更简便的方法,不需要我先将字符串转换为数据帧。谢谢你的帮助!

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]