我有一个包含许多 Dataframe 的列表:
df1 <- data.frame(A = 1:5, B = 2:6, C = LETTERS[1:5])
df2 <- data.frame(A = 1:5, B = 2:6, C = LETTERS[1:5])
df3 <- data.frame(A = 1:5, C = LETTERS[1:5])
my_list <- list(df1, df2, df3)
我想知道这个列表中的每个数据框是否包含相同的列(即,相同数量的列,都具有相同的名称和相同的顺序)。
我知道您可以使用lapply
轻松地在列表中找到 Dataframe 的列名:
lapply(my_list, colnames)
是否有方法确定列名中是否存在任何差异?我意识到这是一个涉及成对比较的复杂问题。
4条答案
按热度按时间vngu2lb81#
您可以通过简单地检查每个列名的计数是否为
== length(my_list)
来避免成对比较。这将同时检查 Dataframe 的dim
和names
-在碱R中,即无
%>%
-或者稍微优化一点
yquaqz182#
下面是另一个使用
Reduce
的base
解决方案:您还可以使用
至于发生了什么,
Reduce()
在列表中累积。首先,计算identical(names_df1, names_df2)
。如果它为真,我们希望它返回相同的向量评估!然后我们可以继续使用它来与列表中的其他成员进行比较。最后,如果所有值都为true,我们将返回一个字符向量。由于您可能需要一个逻辑输出,因此使用
!is.logical(...)
将该字符向量转换为布尔值。也可以在这里看到,因为我很受另一个帖子的启发:
check whether all elements of a list are in equal in R
在我的编辑之后,我看到了一个类似的:
Test for equality between all members of list
hiz5n14c3#
我们可以使用
dplyr::bind_rows
:hujrc8aj4#
以下是我的回答: