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

如何用R检查并插入子ID对应的缺失主ID行?

检查并插入缺失的主ID行

针对你提供的数据框,我们可以通过以下步骤找出无对应主ID的子ID,并插入对应的主ID行:

示例数据

先构造你给出的示例数据框:

df <- data.frame(
  ID = c("X9999", "X9999.000", "Y8888", "Y8888.111", "Z7777.555"),
  Comment1 = rep("text", 5),
  Comment2 = rep("text", 5),
  stringsAsFactors = FALSE
)

方法一:使用tidyverse工具

适合习惯tidy语法的用户,步骤清晰:

library(tidyverse)

# 提取所有ID对应的主ID(分割小数点前部分),并去重
all_main_ids <- df$ID %>%
  str_split_fixed("\\.", 2) %>%
  .[,1] %>%
  unique()

# 找出原数据框中不存在的主ID
missing_main_ids <- setdiff(all_main_ids, df$ID)

# 为缺失的主ID创建新行,Comment列设为NA(可改为空字符串"")
new_rows <- tibble(
  ID = missing_main_ids,
  Comment1 = NA_character_,
  Comment2 = NA_character_
)

# 合并原数据与新行,按ID排序
result_df <- bind_rows(df, new_rows) %>%
  arrange(ID)

print(result_df)

方法二:使用Base R实现

无需额外加载包,适合轻量需求:

# 提取所有主ID并去重
all_main_ids <- sapply(strsplit(df$ID, "\\."), `[`, 1)
all_main_ids <- unique(all_main_ids)

# 筛选出缺失的主ID
missing_main_ids <- setdiff(all_main_ids, df$ID)

# 创建新行数据框
new_rows <- data.frame(
  ID = missing_main_ids,
  Comment1 = NA,
  Comment2 = NA,
  stringsAsFactors = FALSE
)

# 合并数据并按ID排序
result_df <- rbind(df, new_rows)
result_df <- result_df[order(result_df$ID), ]

print(result_df)

说明

  • 分割ID时用\\.是因为正则表达式中点号是特殊字符,需要转义。
  • 缺失主ID对应的Comment列设为NA,符合R的缺失值表示规范,你也可以根据需求改为空字符串""。
  • 最后按ID排序可以让主ID和对应的子ID相邻,便于查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04