如何在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
相关产品推荐
相关产品推荐

