计算几个数据帧之间匹配的列

Jul*_*son 2 merge r data-manipulation dataframe

我有几个数据框,其中的某些列匹配(名称上),我想知道几列。我现在正在使用此功能来合并它们:

dflist <- list(d1, d2)
Reduce(function(x, y) merge(x, y, all=TRUE), dflist, accumulate=FALSE)
Run Code Online (Sandbox Code Playgroud)

但是直到我查看它之前,我不知道有多少匹配。另外,我想删除不匹配的列,而不是填写NA。

编辑,添加示例:

d1 = mtcars
d2 = mtcars[, 1:4]
d3 = mtcars[, 3:5]
dflist = list(d1,d2,d3)

dflist <- list(d1, d2)
Reduce(function(x, y) merge(x, y, all=TRUE), dflist, accumulate=FALSE
Run Code Online (Sandbox Code Playgroud)

tal*_*lat 5

这是一个例子:

d1 = mtcars
d2 = mtcars[, 1:4]
d3 = mtcars[, 3:5]
dflist = list(d1,d2,d3)
Run Code Online (Sandbox Code Playgroud)

现在,要在df的列表中获取匹配的列名:

Reduce(intersect, lapply(dflist, names))
# [1] "disp" "hp" 
Run Code Online (Sandbox Code Playgroud)

然后,您可以仅使用选定的公共列继续合并过程,例如,使用:

common_cols = Reduce(intersect, lapply(dflist, names))

Reduce(function(...) merge(..., all=TRUE), 
       lapply(dflist, function(x) x[, common_cols, drop=FALSE]))
Run Code Online (Sandbox Code Playgroud)