查找多个数据集共有的列

th_*_*_cy 0 r

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

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

Ron*_*hah 5

我们可以使用Reduceintersect

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

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

Reduce(intersect, lapply(list(df1, df2, df3), names))
#[1] "a" "c"
Run Code Online (Sandbox Code Playgroud)

如果您想对公共列进行子集化

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
Run Code Online (Sandbox Code Playgroud)

数据

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)
Run Code Online (Sandbox Code Playgroud)