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



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

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))

我们可以将所有数据帧放在一个列表中,使用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

如果你想从这个列表中访问单个数据帧,你可以执行final_df[[1]]final_df[[2]]等等

最新更新