假设我有2个数据框:
a1 <- data.frame(a = 1:5, b=2:6)
a2 <- data.frame(a = 1:5, b=c(2:5,NA))
我想确定哪些列不相同(稍后我需要列号)。我认为这可以解决问题:
apply(!a1==a2, 2, sum, na.rm=TRUE)
但是,因为a2中的最后一个条目是NA,所以它不起作用。
答案 0 :(得分:2)
不确定您使用sum
的原因,但要确定哪些列不相同,您可以mapply
使用identical
并取消结果。
which(!mapply(identical, a1, a2))
# b
# 2
表示列号。或者更简单地用于列子集
!mapply(identical, a1, a2)
# a b
# FALSE TRUE
正如注释一样,单词相同在R中的含义可能与==
的结果不同,因此您可能需要稍微澄清一下您的问题。
x <- 1
y <- 1L
x == y
# [1] TRUE
identical(x, y)
# [1] FALSE
答案 1 :(得分:0)
如果您想使用sum
,可以尝试
colSums(a1==a2, na.rm=TRUE)!=nrow(a1)
# a b
#FALSE TRUE
或使用您的代码
apply(a1==a2, 2, sum, na.rm=TRUE)!=nrow(a1)
# a b
#FALSE TRUE