假设您有一个名为data的数据框,其中包含两个相同的列:
A B
1 1
2 2
3 3
4 4
如何检查这两列是否相同并返回一个逻辑值来表示它?一个非常基本的伪代码是:
if(data$A == data$B)
{
print("Column A and B are identical")
}
我一直在搞乱这一点,并没有找到一种方法来做这似乎没有不必要的错综复杂。感谢。
答案 0 :(得分:22)
您可以使用identical
identical(DT[['A']],DT[['B']])
答案 1 :(得分:18)
您可以使用all()
:
> data <- data.frame(A=c(1,2,3,4), B=c(1,2,3,4))
> all(data$A == data$B)
[1] TRUE
答案 2 :(得分:3)
这对您的问题可能有点过分,但您可能还想从“比较”的pacakge中查看compare()
。请考虑以下示例:
> data <- data.frame(A = c(1, 2, 3, 4), B = c(1, 2, 3, 4))
> compare(data[1], data[2]) ## Should be false
FALSE [TRUE]
> compare(data[1], data[2], ignoreNames = TRUE) # Allow different names
TRUE
dropped names
> data <- data.frame(A = c(1, 2, 3, 4), B = as.character(c(1, 2, 3, 4)))
> str(data) ## "B" is now a factor, so use `coerce` to test for equality
'data.frame': 4 obs. of 2 variables:
$ A: num 1 2 3 4
$ B: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
> compare(data[1], data[2], ignoreNames = TRUE, coerce = TRUE)
TRUE
[A] coerced from <factor> to <numeric>
dropped names
有一个通用逻辑参数allowAll
,可以设置为TRUE
以允许compare
函数尝试不同的转换来测试相等性。