Присоединить датафрейм к нескольким спискам - PullRequest
1 голос
/ 01 июня 2019

У меня есть следующий список:

$df1
  x   y          z
1 a 145 2010-01-01
2 b  22 2010-02-01
3 c  33 2010-03-01

$df2
  x   y          z
1 d  45 2010-01-01
2 e  35 2010-02-01
3 f 633 2010-03-01

У меня также есть фрейм данных, который выглядит следующим образом:

    x   y          z
1 aty 451 2010-01-01
2 b43 452 2010-02-01
3 crf 343 2010-03-01

Я пытаюсь присоединиться к dataframe от date столбца z для каждого из списков, поэтому ожидаемый результат будет примерно таким:

$df1
  x   y          z  x.1 y.1
1 a 145 2010-01-01  aty 451
2 b  22 2010-02-01  b43 452
3 c  33 2010-03-01  crf 343

$df2
  x   y          z  x.1 y.1
1 d  45 2010-01-01  aty 451
2 e  35 2010-02-01  b43 452
3 f 633 2010-03-01  crf 343

Данные:

foo <- list(df1 = data.frame(x=c('a', 'b', 'c'),y = c(145,22,33), z=c("2010-01-01", "2010-02-01", "2010-03-01")), 
            df2 = data.frame(x=c('d', 'e', 'f'),y = c(45,35,633), z=c("2010-01-01", "2010-02-01", "2010-03-01")))


foo2 <- data.frame(x = c('aty', 'b43', 'crf'), y= c(451,452,343), z=c("2010-01-01", "2010-02-01", "2010-03-01"))

Ответы [ 2 ]

3 голосов
/ 01 июня 2019

Базовая опция R - использовать Map и merge каждый кадр данных в foo с foo2

Map(merge, foo, list(foo2), by = "z")

#$df1
#           z x.x y.x x.y y.y
#1 2010-01-01   a 145 aty 451
#2 2010-02-01   b  22 b43 452
#3 2010-03-01   c  33 crf 343

#$df2
#           z x.x y.x x.y y.y
#1 2010-01-01   d  45 aty 451
#2 2010-02-01   e  35 b43 452
#3 2010-03-01   f 633 crf 343
2 голосов
/ 01 июня 2019

Мы можем использовать tidyverse

library(tidyverse)
map(foo, inner_join, foo2, by = 'z')
#$df1
#  x.x y.x          z x.y y.y
#1   a 145 2010-01-01 aty 451
#2   b  22 2010-02-01 b43 452
#3   c  33 2010-03-01 crf 343

#$df2
#  x.x y.x          z x.y y.y
#1   d  45 2010-01-01 aty 451
#2   e  35 2010-02-01 b43 452
#3   f 633 2010-03-01 crf 343

Или используя base R

lapply(foo, merge, foo2, by = 'z')
#$df1
#           z x.x y.x x.y y.y
#1 2010-01-01   a 145 aty 451
#2 2010-02-01   b  22 b43 452
#3 2010-03-01   c  33 crf 343

#$df2
#           z x.x y.x x.y y.y
#1 2010-01-01   d  45 aty 451
#2 2010-02-01   e  35 b43 452
#3 2010-03-01   f 633 crf 343
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...