R-使用上一列中的值填充单元格

时间:2018-11-26 16:46:51

标签: r

我有一个这样的数据框

x <- c(1, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0)
y <- c(10:20)
dat <- rbind(x, y)

我不希望X行包含0。相反,我想用最近的非零列中的值替换0。

预期输出为

1    1    1    1    2    2    2    3    3     3     3
10   11   12   13   14   15   16   17   18    19    20

这类似于找到的here解决方案,但是按列而不是按行操作。

谢谢!

2 个答案:

答案 0 :(得分:3)

步骤1:NA替换所有零,因为...

dat[1, dat[1,] == 0] <- NA

步骤2: ...,然后可以使用esp函数。旨在根据NA

dat[1, ] <- zoo::na.locf(unlist(dat[1,]))

# dat[1, ] <- zoo::na.locf(dat[1, ]) 

结果:

#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
#x    1    1    1    1    2    2    2    3    3     3     3
#y   10   11   12   13   14   15   16   17   18    19    20

由于您的示例是matrix,因此您的真实数据可能有data.frame。确保将{.1行} data.frame行插入向量中,以便?unlist可以按需运行。

答案 1 :(得分:2)

这是tidyverse的一个选项,我们在其中转置数据,并在所有列上使用fill,然后将其转回

library(tidyverse)
dat %>%
     t %>% 
     as.data.frame %>% 
     na_if(., 0) %>% 
     fill(!!! rlang::syms(names(.))) %>%
     t