Как сделать параллельный cbind - PullRequest
1 голос
/ 27 февраля 2020

У меня есть три тибля a, b, c в векторе first=c(a,b,c). У меня есть еще три тибля в другом векторе second=c(d,e,f). Как мне сделать параллельный cbind? Таким образом, a должен быть помечен как d, b как e, а c как f. Я начал с чего-то вроде

lapply(first,function(item){}) 

, но я не знаю, как принять во внимание второй список "параллельным" способом.

Пример-

a1<-data.frame(a=c(1,2),b=c(4,5))
a2<-data.frame(a=c(5,6),b=c(7,8))
a3<-data.frame(e=c(34,26),f=c(41,65))
a4<-data.frame(e=c(13,25),f=c(14,57))

Я хочу привязать a1 к a3 и a2 к a4, чтобы получить

  a b  e  f
1 1 4 34 41
2 2 5 26 65

и

  a b  e  f
1 5 7 13 14
2 6 8 25 57

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Мы можем создать список a1, a2 и a3, a4 и использовать от Map до cbind их.

Map(cbind, list(a1, a2), list(a3 ,a4))

#[[1]]
#  a b  e  f
#1 1 4 34 41
#2 2 5 26 65

#[[2]]
#  a b  e  f
#1 5 7 13 14
#2 6 8 25 57

purrr эквивалент:

purrr::map2(list(a1, a2), list(a3 ,a4), cbind)
1 голос
/ 28 февраля 2020

Если у нас есть векторы символов для объектов, используйте mget, чтобы вернуть значения объектов в list, а затем используйте map2 до l oop над соответствующими элементами list и свяжите столбцы с bind_cols

library(purrr)
library(dplyr)
map2(mget(first), mget(second), bind_cols)
...