You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于已有ID列生成唯一ID:用dplyr填充不重复NA值

用dplyr填充ID列的NA为唯一且不重复的值

给定数据框:

test <- data.frame(ID = c(1,2,3,4,NA, NA, 6, 8, 9))

需要将NA替换为不在现有ID中的唯一值,每个NA对应的值不能重复。以下是两种符合要求的dplyr解决方案:

方案1:从现有ID最大值后生成连续值填充

这种方法简单直接,生成的填充值都大于现有ID的最大值,完全避免与现有值重复:

library(dplyr)

# 计算NA数量和现有ID的最大值
na_count <- sum(is.na(test$ID))
max_existing_id <- max(test$ID, na.rm = TRUE)

# 生成填充序列并替换NA
test_filled <- test %>%
  mutate(ID = replace(ID, is.na(ID), seq(max_existing_id + 1, max_existing_id + na_count)))

执行后结果示例:

> test_filled
  ID
1  1
2  2
3  3
4  4
5 10
6 11
7  6
8  8
9  9

方案2:优先填充现有ID的空缺值

如果希望优先填补现有ID之间的空缺(比如示例中的5),再补充后续值,可以用以下方法:

library(dplyr)
library(tidyr)

# 获取现有非NA的ID集合
existing_ids <- test %>% drop_na(ID) %>% pull(ID)
# 计算需要填充的NA数量
na_count <- sum(is.na(test$ID))

# 生成包含现有ID和足够补位的序列,筛选出不在现有ID中的值,取前na_count个
fill_values <- setdiff(
  seq(min(existing_ids), max(existing_ids) + na_count),
  existing_ids
)[1:na_count]

# 替换NA
test_filled <- test %>%
  mutate(ID = replace(ID, is.na(ID), fill_values))

执行后结果示例:

> test_filled
  ID
1  1
2  2
3  3
4  4
5  5
6 10
7  6
8  8
9  9

内容的提问来源于stack exchange,提问作者Sulz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:23:15