合并多个具有相同列的数据框

3
我希望将拥有一些共同列的多个DataFrame合并成一个新的DataFrame。新DataFrame的列应该是共同的列。
例如,假设我有df1、df2、df3三个数据框:
df1:
A   B   C   D
1   2   3   4

df2:
A   C   D   E
1   2  -1   5

df3:
C   D   F   G
0  -1   0   7

New dataframe
C   D 
3   4 
2  -1
0  -1

我曾尝试在循环中使用match函数,以查找重合的列:

match(df1,df2)

match(df2,df3)

match(df3,df1)

如果我有许多DataFrame,那么处理它们将需要大量时间和代码行数。是否有更好的方法可以建议?

1个回答

1

一种选择是将数据集存入一个list,然后查找相交的列名。

library(tidyverse)
lst1 <- mget(paste0("df", 1:3))
nm1 <- map(lst1, names) %>%
          reduce(intersect)    
map_dfr(lst1, ~ .x %>% 
                  select(nm1))
#  C  D
#1 3  4
#2 2 -1
#3 0 -1

或者在 基本 R 中。
nm1 <- Reduce(intersect, lapply(lst1, names))
out <- do.call(rbind, lapply(lst1, subset, select = nm1))
row.names(out) <- NULL

数据

df1 <- structure(list(A = 1L, B = 2L, C = 3L, D = 4L), class = "data.frame", row.names = c(NA, 
-1L))

df2 <- structure(list(A = 1L, C = 2L, D = -1L, E = 5L), class = "data.frame", row.names = c(NA, 
-1L))

df3 <- structure(list(C = 0L, D = -1L, F = 0L, G = 7L), class = "data.frame", row.names = c(NA, 
-1L))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接