R 在三个数据集中只保留公共列

R 在三个数据集中只保留公共列,r,R,我有三个数据集。每个数据集具有不同的维度。但每个数据集都有一些通用的列名。现在我想要三个数据集,它们都有相同的列名 df1<-data.frame(c(1,2,3),c(4,5,6),c(7,8,9)) names(df1)<-c("a","b","c") df2<-data.frame(c(3,2,3),c(4,6,6)) names(df2)<-c("a","b") df3<-data.frame(c(2,2,3),c(8,5,6),c(7,8,9),c(13,

我有三个数据集。每个数据集具有不同的维度。但每个数据集都有一些通用的列名。现在我想要三个数据集,它们都有相同的列名

df1<-data.frame(c(1,2,3),c(4,5,6),c(7,8,9))
names(df1)<-c("a","b","c")
df2<-data.frame(c(3,2,3),c(4,6,6))
names(df2)<-c("a","b")
df3<-data.frame(c(2,2,3),c(8,5,6),c(7,8,9),c(13,12,11))
names(df3)<-c("a","b","c","d")
## resulting data frames should be
res_df1<-data.frame(c(1,2,3),c(4,5,6))
res_df2<-data.frame(c(3,2,3),c(4,6,6))
res_df3<-data.frame(c(2,2,3),c(8,5,6))

df1我们可以将所有数据帧放在一个列表中,使用
Reduce
获得公共列名,然后从每个列中子集公共列

list_df <- list(df1, df2, df3)
cols <- Reduce(intersect, lapply(list_df, names))
final_df <- lapply(list_df, `[`, cols)
final_df

#[[1]]
#  a b
#1 1 4
#2 2 5
#3 3 6

#[[2]]
#  a b
#1 3 4
#2 2 6
#3 3 6

#[[3]]
#  a b
#1 2 8
#2 2 5
#3 3 6

list_df谢谢,先生,如果我们在任何dataset@jeetkamal
NA
s在这里不重要,因为我们只根据列的名称进行子集设置。