如何确保 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
中获取数据集,并获取 intersect
ing 名称并将其用于子集
lst1 <- mget(ls(pattern = '^df\d+$'))
nm1 <- Reduce(intersect, lapply(lst1, names))
lapply(lst1, subset, select = nm1)
我有 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
中获取数据集,并获取 intersect
ing 名称并将其用于子集
lst1 <- mget(ls(pattern = '^df\d+$'))
nm1 <- Reduce(intersect, lapply(lst1, names))
lapply(lst1, subset, select = nm1)