Как объединить фрейм данных в списке с тем же именем в R? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть список, который содержит много данных.Я хочу объединить их, если они имеют одинаковое имя, то есть объединить все кадры данных с одинаковыми именами "a" и "b".Вот так

a <- "aaaaa"
b <- "bbbbb"
c <- "ccccc"

g <- list(df1 <- data.frame(a,b), mf2 <- data.frame(b,b),
      mf1 <- data.frame(c,b), df2 <- data.frame(a,c),
      mf3 <- data.frame(b,c))
names(g) <- c("a","b","a","b","c")
> g
$`a`
      a     b
1 aaaaa bbbbb
$b
      b   b.1
1 bbbbb bbbbb
$a
      c     b
1 ccccc bbbbb
$b
      a     c
1 aaaaa ccccc
$c
      b     c
1 bbbbb ccccc
#I want to merge them by names and ideal result should be
$`a`
      a     b     c     b
1 aaaaa bbbbb ccccc bbbbb
$b
      b   b.1     a     c
1 bbbbb bbbbb aaaaa ccccc
$c
      b     c
1 bbbbb ccccc

Я хочу объединить их по именам, и идеальный результат должен быть таким же, как наверху.Как я могу это сделать?

1 Ответ

0 голосов
/ 25 августа 2018

Вот решение tidyverse. Мы можем разделить список по имени и затем использовать bind_cols, чтобы объединить фрейм данных для каждой группы.

library(tidyverse)

g2 <- map(split(g, names(g)), bind_cols)
g2
# $`a`
#       a     b     c    b1
# 1 aaaaa bbbbb ccccc bbbbb
# 
# $b
#       b   b.1     a     c
# 1 bbbbb bbbbb aaaaa ccccc
# 
# $c
#       b     c
# 1 bbbbb ccccc

Базовый эквивалент R выглядит следующим образом.

g2 <- lapply(split(g, names(g)), function(x) do.call(cbind, x))
g2
# $`a`
#     a.a   a.b   a.c   a.b
# 1 aaaaa bbbbb ccccc bbbbb
# 
# $b
#     b.b b.b.1   b.a   b.c
# 1 bbbbb bbbbb aaaaa ccccc
# 
# $c
#     c.b   c.c
# 1 bbbbb ccccc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...