Подсчет столбцов, которые совпадают между несколькими фреймами данных - PullRequest
2 голосов
/ 07 марта 2019

У меня есть несколько фреймов данных, в которых есть несколько совпадающих столбцов (по названию), и я хочу знать, сколько. Сейчас я использую эту функцию, чтобы объединить их:

dflist <- list(d1, d2)
Reduce(function(x, y) merge(x, y, all=TRUE), dflist, accumulate=FALSE)

Но я не знаю, сколько совпало, пока не посмотрю. В качестве альтернативы, я хотел бы удалить столбцы, которые не совпадают, вместо того, чтобы заполнять их 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

1 Ответ

5 голосов
/ 07 марта 2019

Вот пример:

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

Теперь, чтобы получить совпадающие имена столбцов в списке df:

Reduce(intersect, lapply(dflist, names))
# [1] "disp" "hp" 

Затем вы можете продолжить процесс слияния только с выбранными общими столбцами, например, используя:

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

Reduce(function(...) merge(..., all=TRUE), 
       lapply(dflist, function(x) x[, common_cols, drop=FALSE]))
...