我有一个包含很多数据框的列表。如果它们具有相同的名称,我想合并它们,即合并所有具有相同名称“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
我想按名称合并它们,理想的结果应该像上面的那样。我怎样才能做到这一点?
这里有一个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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)