Как бы вы суммировали одинаковые столбцы в списке объектов зоопарка? - PullRequest
3 голосов
/ 05 июля 2019

Предположим, у вас есть:

all.list <- list()
all.list[1] <- list(read.zoo(data.frame(dt=as.Date('2011-01-01')+0:9, a=1:10, b=11:20, c=21:30), index.column = "dt"))
all.list[2] <- list(read.zoo(data.frame(dt=as.Date('2011-01-05')+0:9, a=1:10, b=11:20, c=21:30), index.column = "dt"))
all.list[3] <- list(read.zoo(data.frame(dt=as.Date('2011-01-07')+0:9, a=1:10, b=11:20, c=21:30), index.column = "dt"))

Как мне получить объект зоопарка, который имеет итоговую сумму (сумму) для каждой даты для столбцов: a, b, c?

ПРИМЕЧАНИЕ # 1: Я бы предпочел реализацию base-R

Ответы [ 2 ]

4 голосов
/ 05 июля 2019

Другое решение, использующее merge.zoo в сочетании с Reduce:

  1. Заполните список объединением всех дат для каждого компонента (пропущенные значения заполнены нулями)
  2. Сумма по элементам списка с Reduce
library(zoo)

merged.data <- Reduce("+", do.call(merge, args = c(all.list, retclass = "list", fill = 0)))

## add original column names
setNames(merged.data, names(all.list[[1]]))
#>             a  b  c
#> 2011-01-01  1 11 21
#> 2011-01-02  2 12 22
#> 2011-01-03  3 13 23
#> 2011-01-04  4 14 24
#> 2011-01-05  6 26 46
#> 2011-01-06  8 28 48
#> 2011-01-07 11 41 71
#> 2011-01-08 14 44 74
#> 2011-01-09 17 47 77
#> 2011-01-10 20 50 80
#> 2011-01-11 12 32 52
#> 2011-01-12 14 34 54
#> 2011-01-13 16 36 56
#> 2011-01-14 18 38 58
#> 2011-01-15  9 19 29
#> 2011-01-16 10 20 30

class(merged.data)
#> [1] "zoo"
3 голосов
/ 05 июля 2019
d = data.frame(lapply(X = split.default(
    x = data.frame(do.call(
        what = merge.zoo,
        args = c(all.list, fill = 0))),
    f = unlist(lapply(all.list, names))),
    FUN =  rowSums))

d$Date = row.names(d)
read.zoo(file = d,
         index.column = NCOL(d),
         format = "%Y-%m-%d")
#            a  b  c
#2011-01-01  1 11 21
#2011-01-02  2 12 22
#2011-01-03  3 13 23
#2011-01-04  4 14 24
#2011-01-05  6 26 46
#2011-01-06  8 28 48
#2011-01-07 11 41 71
#2011-01-08 14 44 74
#2011-01-09 17 47 77
#2011-01-10 20 50 80
#2011-01-11 12 32 52
#2011-01-12 14 34 54
#2011-01-13 16 36 56
#2011-01-14 18 38 58
#2011-01-15  9 19 29
#2011-01-16 10 20 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...