R语言填充data.frame列NA值延续数值序列 优先tidyverse方案
R 数据框NA值连续序列填充解决方案(tidyverse优先)
实现代码
首先加载tidyverse套件:
library(tidyverse)
核心处理逻辑:
df_filled <- df %>% mutate( B = replace( x = B, list = is.na(B), values = last(na.omit(B)) + seq_len(sum(is.na(B))) ) )
逻辑说明
- 用
na.omit(B)提取B列所有非空值,再用last()取到序列末尾的有效值(本示例中为5) sum(is.na(B))统计B列NA值的总个数,用seq_len()生成从1到NA总个数的连续增量序列- 用
replace()函数将所有NA位置的取值,替换为「末尾有效值+对应增量」,即可得到延续的连续序列
运行后输出结果和需求一致:
df_filled A B 1 a 1 2 b 1 3 c 2 4 d 2 5 e 3 6 f 4 7 g 5 8 h 6 9 i 7 10 j 8
适配说明
上述代码仅适配当前需求中NA出现在序列末尾、需要延续末尾连续+1序列的场景,如果你的数值序列不是严格每次+1的连续值,或者NA出现在序列中间,调整增量计算逻辑即可。
内容的提问来源于stack exchange,提问作者enricoferrero
相关产品推荐
相关产品推荐

