比较两个表并返回不匹配列表

时间:2015-12-13 03:30:23

标签: r

我希望能够比较两个表并让R返回一个不匹配的记录和变量列表。

例如,使用以下两个表

> df1
  id let num
1 1a   a   1
2 2b   b   2
3 3c   c   3
4 4d   d   4
5 5e   e   5
> df2
  id let num
1 1a   a   1
2 2b   b   2
3 3c   c   3
4 4d   e   4
5 5e   d   5

我希望compare()函数返回类似" id = 4d,let"让我知道id = 4d的记录中的let变量不匹配。

我在CRAN中看到了比较库,但是如果不匹配,它只返回整个变量的TRUE或FALSE。是否有一个具有不同比较功能的库,或者手动执行此操作的方法?

3 个答案:

答案 0 :(得分:2)

df1 <- read.table(text="
id let1 num1
1a   a   1
2b   b   2
3c   c   3
4d   d   4
5e   e   5", head=T, as.is=T)

df2 <- read.table(text="
id let2 num2
1a   a   1
2b   b   2
3c   c   3
4d   e   4
5e   d   5", head=T, as.is=T)

df <- merge(df1, df2, by="id")
df$let <- ifelse(df$let1 == df$let2, "equal", "not equal")
df$num <- ifelse(df$num1 == df$num2, "equal", "not equal")
df
#   id let1 num1 let2 num2       let   num
# 1 1a    a    1    a    1     equal equal
# 2 2b    b    2    b    2     equal equal
# 3 3c    c    3    c    3     equal equal
# 4 4d    d    4    e    4 not equal equal
# 5 5e    e    5    d    5 not equal equal

答案 1 :(得分:0)

你的意思是which?快速可重复的例子:

> m1 <- m2 <- matrix(1:9, 3)
> diag(m1) <- 0
> which(m1 != m2, arr.ind = TRUE)
     row col
[1,]   1   1
[2,]   2   2
[3,]   3   3

答案 2 :(得分:0)

类似的东西:

df_diff <- list()

 for (i in 1:ncol(df1)) 
{
 df_diff[[i]] <- df1$id[df2[i] != df1[i]]
 names(df_diff)[i] <- names(df1)[i]
}

这应该产生(希望:))一个字符向量列表(每个变量一个)。每个向量包含df1的ID,其中两个df的记录不匹配。