如何在两个数据帧中找到不一致的单元格

时间:2015-12-23 14:21:00

标签: r

我有两个具有相同行和列名称的大型数据框。我想确定哪些"细胞"不同。例如,假设我有tab1和tab2

tab1 <- data.frame(name=c('arthur', 'john', 'david', 'loopy'), grade=c(1, 4, 3, 2), size=c(23, 34, 23, 13))
tab2 <- data.frame(name=c('jean', 'john', 'david', 'loopy'), grade=c(1, 4, 5, 2), size=c(23, 34, 23, 16))

我希望函数报告[1,1],[3,2]和[4,3]不一致。

单元格中有数字,因子和字符值。没有约会。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

确保您的“名称”列为character而非factors,然后您只需使用==检查相等性,或!=检查不等式:

> tab1$name <- as.character(tab1$name)
> tab2$name <- as.character(tab2$name)
> tab1 == tab2
      name grade  size
[1,] FALSE  TRUE  TRUE
[2,]  TRUE  TRUE  TRUE
[3,]  TRUE FALSE  TRUE
[4,]  TRUE  TRUE FALSE

要获得职位,请使用which(..., arr.ind = TRUE)

> which(tab1 != tab2, arr.ind = TRUE)
     row col
[1,]   1   1
[2,]   3   2
[3,]   4   3