Суммируйте последнее значение в кадре данных в списке A с первым значением в кадре данных в списке B - PullRequest
0 голосов
/ 12 октября 2018

У меня есть два списка, которые содержат 500 кадров данных.Вот пример двух списков, содержащих по 2 фрейма данных в каждом.

 l1
    [[1]]
      X1 X2 X3
    1  1  0  0
    2  5  1  8

    [[2]]
      X1 X2 X3
    1  0  1  1
    2  3  0  4

и

l2
   [[1]]
      X1 X2 X3
    1  1  1  0
    2  0  1  1

    [[2]]
      X1 X2 X3
    1  0  1  0
    2  0  1  1

Мне нужно суммировать последнее значение в столбце фрейма данных с первым значениемодного столбца в кадре данных в другом списке.Например:

l1[[1]]$x1[2] to l2[[1]]$x1[1] ; and l1[[1]]$x3[2] to l2[[1]]$x3[1] 

В моем примере ожидаемый результат должен быть записан в кадрах данных, содержащихся в l2, и должен выглядеть следующим образом:

> l2
[[1]]
  X1 X2 X3
1  6  2  8
2  0  1  1

[[2]]
  X1 X2 X3
1  3  1  4
2  0  1  1

Я собираюсь сделать это ссписки, которые содержат 500 кадров данных.Я бы предпочел Dplyr.

1 Ответ

0 голосов
/ 12 октября 2018

Попробуйте Map / mapply:

# data
l1 <- list("X1 X2 X3
1  1  0  0
          2  5  1  8",
          "X1 X2 X3
1  0  1  1
          2  3  0  4")

l1 <- lapply(l1, function(x) read.table(text = x, header = TRUE))

l2 <- list("X1 X2 X3
1  1  1  0
           2  0  1  1",
           "X1 X2 X3
1  0  1  0
           2  0  1  1")
l2 <- lapply(l2, function(x) read.table(text =x, header = T))

# Map
Map(function(a, b) rbind(a[2, ] + b[1,  ], b[2, ]), l1, l2)

# [[1]]
# X1 X2 X3
# 2   6  2  8
# 21  0  1  1
# 
# [[2]]
# X1 X2 X3
# 2   3  1  4
# 21  0  1  1

ИЛИ:

library(tidyverse)
map2(l1, l2, ~bind_rows(.x %>%
                          slice(2) %>%
                          bind_rows(.y %>%
                                      slice(1)) %>%
                          summarise_all(funs(sum)), 
                        .y %>%
                          slice(2)))
...