> 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。
答案 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