用先前的值替换字符串中的元素
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]
我有一个这样的字符串:
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]