我想从两个单独的列表中选择相同的列名,输出将是一个列表 这里的例子:
列表1
> list(p1=data.frame(x=1,y=2), p2=data.frame(x=3,y=4), p3=data.frame(x=1,y=3))
$p1
x y
1 1 2
$p2
x y
1 3 4
$p3
x y
1 1 3
列表2
> list(p1=data.frame(x=11,y=12), p2=data.frame(x=13,y=14), p3=data.frame(x=11,y=13))
$p1
x y
1 11 12
$p2
x y
1 13 14
$p3
x y
1 11 13
输出格式:
> list(p1=data.frame(a=1,b=2,a1=11,b1=12), p2=data.frame(a=3,b=4,a1=13,b1=14), p3=data.frame(a=1,b=3,a1=11,b1=13))
$p1
a b a1 b1
1 1 2 11 12
$p2
a b a1 b1
1 3 4 13 14
$p3
a b a1 b1
1 1 3 11 13
这里列表1和列表2具有相同的数据帧名称,即p1,p2,p3和类似的列名,即..,x,y
最后我想列出并排的数据框和列名的相同名称
我在这里引用一些参考but it is a nested list
可能rapply
和cbind
会解决我的问题,但我不确定如何取得成功
谢谢。
答案 0 :(得分:3)
您正在寻找与cbind的对比:
A <- list(p1=data.frame(x=1,y=2), p2=data.frame(x=3,y=4), p3=data.frame(x=1,y=3))
B <- list(p1=data.frame(x=11,y=12), p2=data.frame(x=13,y=14), p3=data.frame(x=11,y=13))
mapply(cbind,A,B,SIMPLIFY = F)
$p1
x y x y
1 1 2 11 12
$p2
x y x y
1 3 4 13 14
$p3
x y x y
1 1 3 11 13
答案 1 :(得分:1)
tidyverse解决方案。首先,使用bind_cols
绑定列。然后使用set_names
更改标题。
library(tidyverse)
map2(lst1, lst2, bind_cols) %>%
map(set_names, nm = function(x){
y <- sub("x", "a", x)
z <- sub("y", "b", y)
return(z)
})
# $p1
# a b a1 b1
# 1 1 2 11 12
#
# $p2
# a b a1 b1
# 1 3 4 13 14
#
# $p3
# a b a1 b1
# 1 1 3 11 13
数据强>
lst1 <- list(p1=data.frame(x=1,y=2), p2=data.frame(x=3,y=4), p3=data.frame(x=1,y=3))
lst2 <- list(p1=data.frame(x=11,y=12), p2=data.frame(x=13,y=14), p3=data.frame(x=11,y=13))