Мы создаем индекс, основанный на intersect
инг элементах 'x'
v1 <- Reduce(intersect, list(a$x, b$x, c$x))
rbind(a[a$x %in% v1,], b[b$x %in% v1,], c[c$x %in% v1, ])
# x y
#1 1 5
#2 2 6
#3 3 7
#4 1 7
#5 2 8
#6 3 9
#7 1 6
#8 2 7
#9 3 8
Если имеется много объектов набора данных, лучше сохранить его в list
.Здесь в примере показано, что идентификаторы объекта совершенно разные, но если идентификаторы имеют шаблон, например, df1, df2, ..df100
и т. Д., Становится легче получить его в list
lst1 <- mget(ls(pattern = "^df\\d+$"))
Если идентификаторы объектавсе разные xyz, abc, fq12
и т. д., но это единственные объекты data.frame, загруженные в глобальную среду
lst1 <- mget(names(eapply(.GlobalEnv, 'is.data.frame')))
Затем получите элементы interesecitng столбца 'x'
v1 <- Reduce(intersect, lapply(lst1, `[[`, "x"))
Используйте пересекающийся вектор для подмножества строк элементов list
do.call(rbind, lapply(lst1, function(x) dat[dat$x %in% v1,]))
Здесь мы предполагаем, что имена столбцов одинаковы во всех наборах данных
Другой вариантсделать merge
, а затем unlist
out <- Reduce(function(...) merge(..., by = 'x'), list(a, b, c))
data.frame(x = out$x, y = unlist(out[-1], use.name = FALSE))