首页 > 解决方案 > 如何在 R 的数据框中选择两列?

问题描述

想象一下,我有 2 个 df,分别命名为 A 和 B。对于 df A 的每一行,我想检查 B df 中是否存在相应的行。在下面的示例中,代码将只打印一个答案 TRUE,因为 df A 中的最后一行与 df B 中的最后一行不匹配。

A <- NULL
B <- NULL
A <- data.frame(A = c('a','b','c','d','e'), B = c('1','2','3','4','5'))
B <- data.frame(A = c('a','b','c','d','f'), B = c('1','2','3','4','5'))

i <- 0
for(i in 1: length(A$A))
{
  point <- A[i,]
  if(!point %in% B[which[1:2]])
    print(TRUE)
}

标签: rdataframeselect

解决方案


您可以检查两个表的反连接是否包含任何行(即公共列上的两个数据框之间是否存在任何不相等的行),TRUE如果是则打印

if(diff_rows <- nrow(dplyr::anti_join(A, B)) > 0) print(diff_rows)

# Joining, by = c("A", "B")
# [1] TRUE
# Warning message:
# Column `A` joining factors with different levels, coercing to character vector

如果你想忽略警告,你可以清理一些输出

if(diff_rows <- nrow(suppressWarnings(dplyr::anti_join(A, B, by = names(A)))) > 0) 
  print(diff_rows)

# [1] TRUE 

推荐阅读