如何在R中提取两个数据框中不匹配值对应的ID?
提取差异ID并子集化数据框
你可以直接从comparedf的结果对象中提取差异数据,无需仅依赖summary输出。具体步骤如下:
- 保存
comparedf的完整结果到变量,而非直接输出summary - 从结果对象中提取包含所有差异的数据集
- 提取唯一的差异ID,并用这些ID对df1进行子集化
完整代码示例
df1 <- data.frame(id = c("a", "b", "c", "d","e"), var = c(1, 2, 3, 4, 5), var2 = c(1,2,3,4,5)) df2 <- data.frame(id = c("a", "b", "c", "d","e"), var =c(1,3,4,2,5), var2 = c(1,2,4,3,5)) library(arsenal) # 存储比较结果 comp_result <- comparedf(df1, df2, by = "id") # 提取差异记录的数据框 diff_data <- comp_result$comparison # 获取唯一的差异ID向量 unique_diff_ids <- unique(diff_data$id) # 对df1进行子集化,保留所有存在差异的ID对应的行 df1_diff_subset <- df1[df1$id %in% unique_diff_ids, ]
说明
comp_result$comparison就是summary输出里展示的差异表对应的完整数据集,包含所有列的不匹配记录- 使用
unique()是因为同一个ID可能在多列存在不匹配(比如示例中的c和d),去重后能得到所有有差异的唯一ID - 如果需要保留所有不匹配的行(包括同一ID的多条差异记录),可以直接使用
diff_data$id,但通常子集化只需要唯一ID对应的整行数据
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

