实施例
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的第一个列表合并,第二个元素与seond和simillarly合并,列表的第三个元素,第一个数据帧应该与列表的前一个元素的前两个数据帧合并,并与相应的后两个元素合并。
结果应该是
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
答案 0 :(得分:5)
这应该可以解决问题。 (我没有粘贴在输出中,因为它非常庞大,很容易在你自己的控制台上重现。)
# 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)