我有两个具有相同行和列名称的大型数据框。我想确定哪些"细胞"不同。例如,假设我有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]不一致。
单元格中有数字,因子和字符值。没有约会。
有什么想法吗?
答案 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