如何确保 3 个单独的 dfs 只包含相同的列?

How to make sure 3 separate dfs only contain the same columns?

我有 3 个数据框,都有一些重叠的列名,但也有一些至少在一列中不存在。我正在尝试 1) select 仅存在于所有 3 个 dfs 中的列和 2) 确保所有列的顺序相同(不是按字母顺序查找)。

df1

A     B     C     D
4     5     2     9

df2

A     D     C     F
13    23    94    1

df3

E    C     A     D
3    83    12    7


**Ideal Output**
df1

A     C     D
4     2     9

df2

A     C     D       
13    94    23 

df3

A     C     D
12    83     7

老实说,我不确定从哪里开始。直觉上我是这样想的:

df1 <- apply(df1, 2, function(x) ifelse(colnames(x) %in% colnames(df2) & colnames(df1) %in% colnames(df3), x, subset(df1, select = -c(x))

然后对其他 2 个 dfs 重复。一旦所有三个 dfs 都具有相同的列,那么我将使用其中一个 dfs 作为模板对其进行排序。

col_order <- colnames(df1)

df2 <- df2[, col_order]

我哪里错了?

我们可以在 list 中获取数据集,并获取 intersecting 名称并将其用于子集

lst1 <- mget(ls(pattern = '^df\d+$'))
nm1 <- Reduce(intersect, lapply(lst1, names))
lapply(lst1, subset, select = nm1)