r - 有没有一种简单的方法可以判断存储在一个列表中的许多数据框是否包含相同的列?

标签 r lapply

我有一个包含许多数据框的列表:

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 轻松找到列表中数据框的列名:

lapply(my_list, colnames)

有没有办法确定列名是否存在差异?我意识到这是一个涉及成对比较的复杂问题。

最佳答案

您可以通过简单地检查每个列名的计数是否为 == length(my_list) 来避免成对比较。这将同时检查数据框的 dimnames -

lapply(my_list, names) %>%
  unlist() %>% 
  table() %>% 
  all(. == length(my_list))

[1] FALSE

在基础 R 中,即没有 %>% -

all(table(unlist(lapply(my_list, names))) == length(my_list))

[1] FALSE

或明显更优化-

!any(table(unlist(lapply(my_list, names))) != length(my_list))

关于r - 有没有一种简单的方法可以判断存储在一个列表中的许多数据框是否包含相同的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821533/

相关文章:

r - 从数据框中仅提取数字列

r - case_when - 数据框中的字符数据的奇怪行为

r - 使用 cut() 从多个数值变量创建许多因子变量,并从列表中提取中断

R:使用 lapply 将 data.frame 中的值用作列表的子集元素

r - 按值过滤列表的列表

r - 迭代列表并追加以在 R 中进行回归

r - 在 Shiny 中的 selectInput() 中应该怎么写?

r - 制作一个数据框,它是两个数据框的子集

将 for 循环中的 rbind 替换为 lapply? ( hell 第二圈)

list - 使用snowfall::sfLapply 时正在处理哪个列表元素?