我希望能够比较两个表并让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。是否有一个具有不同比较功能的库,或者手动执行此操作的方法?
答案 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的记录不匹配。