R:如何检查data.frame中的所有列是否相同

时间:2015-08-12 03:00:35

标签: r

> df = data.frame(A = c(1, 2, 3), B = c(3, 2, 2), C = c(3, 2, 1)); df
  A B C
1 1 3 3
2 2 2 2
3 3 2 1
> df2 = data.frame(A = c(1, 2, 3), B = c(1, 2, 3), C = c(1, 2, 3)); df2
  A B C
1 1 1 1
2 2 2 2
3 3 3 3

我想知道我的data.frame中的所有列是否相同。对于df,它应该是FALSE,而对于df2,它应该是TRUE。

3 个答案:

答案 0 :(得分:3)

您可以检查唯一变量向量的数量是否等于1:

length(unique(as.list(df))) == 1
# [1] FALSE
length(unique(as.list(df2))) == 1
# [1] TRUE

另一种方法是检查每个变量是否与第一个变量相同:

all(sapply(df, identical, df[,1]))
# [1] FALSE
all(sapply(df2, identical, df2[,1]))
# [1] TRUE

答案 1 :(得分:0)

您也可以使用'all.equal'进行检查。

sapply(2:ncol(df),function(x) isTRUE(all.equal(df[,x-1],df[,x])))
[1] FALSE FALSE

sapply(2:ncol(df2),function(x) isTRUE(all.equal(df2[,x-1],df2[,x])))
[1] TRUE TRUE

答案 2 :(得分:0)

这是一个相对较老的问题的便捷更新:

您可以从软件包all_equal中使用函数dplyr。如果两个数据帧相同,则函数返回TRUE,否则返回描述它们不相等的原因的字符向量。

以下是更多信息:https://www.rdocumentation.org/packages/dplyr/versions/0.7.8/topics/all_equal