使用R中的上一个数字删除/替换列表中的值

时间:2019-03-23 19:42:39

标签: r

我正在尝试用列表中的前一个数字替换所有零。

列表如下:

x <- c(3,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,3,0,0,0,1,0,2,0)

我已经尝试过该功能

x <- c(3,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,3,0,0,0,1,0,2,0)
replace (x, x==0, first(x))
[1] 3 3 3 3 3 1 3 3 3 3 3 2 3 3 3 3 3 3 3 3 1 3 2 3

但是它将列表= 3的第一个值更改为所有零,并且忽略了2和1。

replace (x, x==0, x)
[1] 3 3 0 0 0 1 0 1 0 0 0 2 0 0 2 0 3 0 0 0 1 3 2 0

2 个答案:

答案 0 :(得分:1)

approx replace将全零NA

后可以使用approx(replace(x, x == 0, NA), xout = 1:length(x), method = "constant", f = 0, rule = 2)$y # [1] 3 3 3 3 3 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 1 1 2 2
 , produces="application/json; charset=UTF-8"

答案 1 :(得分:1)

可以修改this

fill = function(x){
    ave(x, cumsum(x != 0), FUN = function(y) y[pmax(1, cumsum(y != 0))])
}
fill(x)
# [1] 3 3 3 3 3 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 1 1 2 2