为DataFrame的`s_nummer`列空值添加700001起的连续顺序编号
R 实现DataFrame指定列NA值填充连续编号方案
实现逻辑
定位s_nummer列的所有NA值,生成从700001开始、长度和NA数量一致的连续整数序列,替换到对应NA位置即可,可按需增加取值范围校验避免超出800000上限。
方案1:tidyverse(dplyr)实现
# 加载依赖包 library(dplyr) # 导入示例数据 df <- structure(list(s_nummer = c(599999, 599999, NA, NA), eerste_voornaam = c("Debbie", "Debbie", "Debbie", "Debbie"), tussenvoegsel = c(NA, NA, NA, NA), geslachtsnaam = c("Oomen", "Oomen", "Oomen", "Oomen")), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame")) # 可选:校验NA数量是否超出700001-800000的范围 na_count <- sum(is.na(df$s_nummer)) if (na_count > 100000) { stop("NA值总数量超过100000,超出指定取值范围") } # 填充NA值 df <- df %>% mutate(s_nummer = replace( s_nummer, is.na(s_nummer), seq(from = 700001, length.out = na_count) ))
方案2:Base R 实现(无需加载第三方包)
# 导入示例数据 df <- structure(list(s_nummer = c(599999, 599999, NA, NA), eerste_voornaam = c("Debbie", "Debbie", "Debbie", "Debbie"), tussenvoegsel = c(NA, NA, NA, NA), geslachtsnaam = c("Oomen", "Oomen", "Oomen", "Oomen")), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame")) # 校验NA数量是否超出范围 na_count <- sum(is.na(df$s_nummer)) stopifnot("NA值总数量超过100000,超出指定取值范围" = na_count <= 100000) # 直接赋值填充NA df$s_nummer[is.na(df$s_nummer)] <- seq(from = 700001, length.out = na_count)
两种方案运行后,示例数据的s_nummer列结果为 599999, 599999, 700001, 700002,符合需求。
内容的提问来源于stack exchange,提问作者Debbie Oomen
相关产品推荐
相关产品推荐

