首页 > 解决方案 > 查找多个数据集共有的列

问题描述

我有多个包含几列的数据集。我想提取所有数据集共有的列。例如。如果所有数据集都有一个名为“id”或“Age”的列,我想提取这些。我如何知道所有数据集共有哪些列。

最初我想使用 head 函数,然后通过这些值来检查相似之处。但如果有多个数据集,这可能会变得非常乏味。

标签: r

解决方案


我们可以使用Reduceintersect

Reduce(intersect, lapply(mget(ls(pattern = "df\\d+")), names))
#[1] "a" "c"

pattern参数 inls()应包括您的数据框遵循的模式。在这个例子中,我认为数据框df1df2df3。所以它遵循一个模式"df",后跟一个我在pattern参数 ( df\\d+) 中提到的数字。您需要根据数据框具有的模式更改此设置,或者如果它们没有任何模式,您也可以手动将它们包含在列表中。

Reduce(intersect, lapply(list(df1, df2, df3), names))
#[1] "a" "c"

如果要对公共列进行子集化

list_df <- mget(ls(pattern = "df\\d+"))
common_cols <- Reduce(intersect, lapply(list_df, names))
lapply(list_df, `[`, common_cols)

#$df1
#  a  c
#1 1 11
#2 2 12
#3 3 13
#4 4 14
#5 5 15

#$df2
#  a  c
#1 1 11
#2 2 12
#3 3 13
#4 4 14
#5 5 15

#$df3
#  a  c
#1 1 11
#2 2 12
#3 3 13
#4 4 14
#5 5 15

数据

df1 <- data.frame(a  = 1:5, b = 2:6, c = 11:15)
df2 <- data.frame(a  = 1:5, c = 11:15)
df3 <- data.frame(a  = 1:5, b = 2:6, c = 11:15, d = 21:25)

推荐阅读