我有多个包含多个列的数据集。我想提取所有数据集共有的列。例如。如果所有数据集都有一个名为“id”或“Age”的列,我想提取它们。我如何知道哪些列是所有数据集共有的。
最初我想到使用 head 函数,然后检查这些值以检查相似性。但如果有多个数据集,这可能会变得非常乏味。
我们可以使用Reduce和intersect
Reduce(intersect, lapply(mget(ls(pattern = "df\\d+")), names))
#[1] "a" "c"
Run Code Online (Sandbox Code Playgroud)
pattern参数ls()应该包括您的数据帧遵循的模式。在此示例中,我将数据帧视为df1、df2和df3。因此它遵循一个模式,后跟一个我在参数 ( )"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)