在R中如何重复数据框列的已有数值序列填充全部NA行
R数据框循环重复序列填充NA实现方法
先构造示例测试数据,方便验证效果:
# 构造10行的示例数据框,up、low前3行为有效值,其余为NA df <- data.frame( up = c(1, 3, 5, rep(NA, 7)), low = c(0, 2, 4, rep(NA, 7)) )
方法1:基础R实现(无需加载额外包)
# 提取两列的有效非NA行,硬编码前3行的写法 valid_df <- df[1:3, c("up", "low")] # 自动重复有效序列,生成和原数据框行数一致的填充数据 fill_df <- valid_df[rep(seq_len(nrow(valid_df)), length.out = nrow(df)), ] # 替换原数据框的对应列 df[, c("up", "low")] <- fill_df
如果有效值不固定在前3行,可以用下面的代码自动识别有效行,不需要硬编码行数:
valid_df <- df[complete.cases(df[, c("up", "low")]), ]
方法2:tidyverse风格实现
如果你习惯使用dplyr,可以用更简洁的写法:
library(dplyr) df <- df %>% mutate( # 自动提取当前列的非NA值,循环重复到整列长度 up = rep(na.omit(up), length.out = n()), low = rep(na.omit(low), length.out = n()) )
内容的提问来源于stack exchange,提问作者Babak Kasraei
相关产品推荐
相关产品推荐

