首页 > 解决方案 > 填充索引值上方和下方的选择行

问题描述

在 R 中工作时遇到问题
我在数据框(df)中有一个变量(X),看起来像这样

df$X
NA
12345
NA
NA
32409
NA
NA
NA
NA
NA
04598
NA
NA
NA

我需要执行以下操作:

如果 X 不是 NA,则替换:
- X 中的前一行用该值
- 填写其余行,直到达到下一个值

最终,它需要看起来像这样

df$X
12345
12345
12345
32409
32409
32409
32409
32409
32409
04598
04598
04598
04598
04598

我尝试使用 for 循环来完成第一部分(填写上一行),但似乎无法让它工作

for (x in df$X) {

x = df$X[x]  
y = x -1  
df$X[y] <-  ifelse(!is.na(x), x, NA)

}

非常感谢您的帮助!

标签: rfor-loopif-statementdplyrfill

解决方案


这是一种使用dplyrand的方法tidyr

library(dplyr)
df2 <- df %>%
  mutate(X = if_else(is.na(X), lead(X), X)) %>%
  tidyr::fill(X)

推荐阅读