2012-05-24 5 views
3

ПримераКак я могу объединить рекурсивно соответствующие элементы списка списков

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 и аналогичным образом для третьего элемента списка, первый блок данных должен быть объединен с первыми двумя кадрами данных предыдущих элементов списка и вторым слиянием с соответствующими вторыми двумя элементами.

РЕЗУЛЬТАТ должен быть

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 

ответ

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) 
+1

Очень умный подход +1 –

+0

Спасибо Джош О'Брайен ... Он работает – user1415530

+0

@ пользователь1415530 - Super. Рад, что это помогло. –

Смежные вопросы