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

如何在R中提取df1新增行并延续df2的record_id编号

解决方案

我们可以用tidyverse工具包高效处理这个需求,步骤清晰且适配大数据量场景:

步骤1:加载依赖包

library(tidyverse)

步骤2:提取df1独有的行并生成新record_id

# 获取df2的最大record_id
max_record <- max(df2$record_id)

# 找出df1中存在、但df2中不存在的行(以protocol_no和sequence_number为匹配键)
new_rows <- df1 %>%
  anti_join(df2, by = c("protocol_no", "sequence_number")) %>%
  # 生成连续的record_id,从max_record+1开始递推
  mutate(record_id = max_record + row_number(),
         # 补充df2中存在的其他列,示例默认设为0,可根据实际业务调整
         form_1_complete = 0) %>%
  # 调整列顺序,和df2保持一致
  select(record_id, protocol_no, sequence_number, form_1_complete)

验证结果

运行上述代码后,new_rows即为目标新增行:

new_rows
#> # A tibble: 1 × 4
#>   record_id protocol_no sequence_number form_1_complete
#>       <dbl> <chr>       <chr>                      <dbl>
#> 1        17 study6      5021                           0

如果需要将新增行合并到原df2中,直接执行bind_rows(df2, new_rows)即可。

注意事项

  • 若df2包含更多其他列,只需在mutate环节补充对应列的默认值
  • anti_join在27000+行的数据集上性能表现稳定
  • 确保protocol_no和sequence_number的类型一致(示例中均为字符型,若实际为数值型无需额外转换)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:25:12