例子
a
[[1]]
[[1]]$`1`
ID Values
1 4 160.08858
2 8 83.35774
3 30 51.21873
4 38 54.92554
5 44 77.06082
[[1]]$`2`
ID Values
1 4 0.08858
2 8 183.35774
[[2]]
[[2]]$`1`
ID Values
3 30 51.21873
4 38 54.92554
5 44 77.06082
[[2]]$`2`
ID Values
1 4 0.08858
2 8 183.35774
3 30 51.21873
5 44 77.06082
[[3]]
[[3]]$`1`
ID Values
5 44 77.06082
[[3]]$`2`
ID Values
1 4 0.08858
3 30 51.21873
我想要一个列表,其中第一个元素相同,但第一个列表的第二个元素与第一个元素 1 的列表合并,第二个与第二个元素合并,同样对于列表的第三个元素,第一个数据框应该与列表前面元素的前两个数据框合并,第二个与相应的后两个元素合并。
结果应该是
RESULT
[[1]]
[[1]]$`1`
ID Values
1 4 160.08858
2 8 83.35774
3 30 51.21873
4 38 54.92554
5 44 77.06082
[[1]]$`2`
ID Values
1 4 0.08858
2 8 183.35774
[[2]]
[[2]]$`1`
ID Values
3 30 51.21873
4 38 54.92554
5 44 77.06082
1 4 160.08858
2 8 83.35774
3 30 51.21873
4 38 54.92554
5 44 77.06082
[[2]]$`2`
ID Values
1 4 0.08858
2 8 183.35774
3 30 51.21873
5 44 77.06082
1 4 0.08858
2 8 183.35774
[[3]]
[[3]]$`1`
ID Values
5 44 77.06082
3 30 51.21873
4 38 54.92554
5 44 77.06082
1 4 160.08858
2 8 83.35774
3 30 51.21873
4 38 54.92554
5 44 77.06082
[[3]]$`2`
ID Values
1 4 0.08858
3 30 51.21873
1 4 0.08858
2 8 183.35774
3 30 51.21873
5 44 77.06082
1 4 0.08858
2 8 183.35774
最佳答案
这应该可以解决问题。 (我没有粘贴输出,因为它太庞大了,而且很容易在您自己的控制台上重现。)
# Create some analogous data
df <- data.frame(ID=LETTERS[1:6], Values=5*(1:6), stringsAsFactors=FALSE)
DL <- list(list(`1`=df[1,], `2`=df[2,]),
list(`1`=df[3,], `2`=df[4,]),
list(`1`=df[5,], `2`=df[6,]))
# Build a function that does what you want for a pair of inputs
myrbind <- function(x, y) {
mapply(rbind, y, x, SIMPLIFY=FALSE)
}
myrbind(DL[[1]], DL[[2]]) # Try it out
# Use Reduce to make the merges accumulate as it works through the list.
Reduce(f = myrbind, x = DL, accumulate = TRUE)
关于r - 如何递归合并列表列表的相应元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741415/