gpt4 book ai didi

r - 在 R 中一次对齐多个动物园对象

转载 作者:行者123 更新时间:2023-12-02 08:37:56 27 4
gpt4 key购买 nike

考虑以下动物园对象:

 x <- data.frame(Date = seq(as.Date("2013-02-01"), length=6, by="1 month") - 1, x = seq(6))
y <- data.frame(Date = seq(as.Date("2013-02-01"), length=4, by="1 month"), y = seq(4))
z <- data.frame(Date = seq(as.Date("2012-11-01"), length=9, by="1 month"), z = seq(9))

x.zoo = zoo(x[,-1], order.by = x[,1])
y.zoo = zoo(y[,-1], order.by = y[,1])
z.zoo = zoo(z[,-1], order.by = z[,1])

请注意,3 个动物园对象的长度不同。我想根据变量 "x" 的日期对齐所有对象:换句话说,我想创建一个包含日期列(对象 x 的索引)的新数据框,并且用最接近的可用观察值填充每个变量。

这是我正在寻找的结果:

         Date x  y  z
1 2013-01-31 1 1 4
2 2013-02-28 2 2 5
3 2013-03-31 3 3 6
4 2013-04-30 4 4 NA
5 2013-05-31 5 NA NA
6 2013-06-30 6 NA NA

请注意,实际上,我有 10 个变量要与 x 对齐。我知道 zoo 包中的函数 na.locf,但我不确定如何在多个 zoo 对象的上下文中调整它。

无论如何我可以有效地做到这一点吗?

谢谢!

最佳答案

试试这个:

xx.zoo <- aggregate(x.zoo, as.yearmon)
yy.zoo <- aggregate(y.zoo, as.yearmon)
zz.zoo <- aggregate(z.zoo, as.yearmon)
out <- merge(x = xx.zoo, y = yy.zoo, z = zz.zoo, all = c(TRUE, FALSE, FALSE))

或者如果你不想写出来:

L <- setNames(list(x.zoo, y.zoo, z.zoo), c("x", "y", "z"))
all. <- c(TRUE, rep(FALSE, length(L) - 1)) # all FALSE except first
out <- do.call(merge, c(lapply(L, aggregate, as.yearmon), all = list(all.)))

给出:

> out
x y z
Jan 2013 1 NA 3
Feb 2013 2 1 4
Mar 2013 3 2 5
Apr 2013 4 3 6
May 2013 5 4 1
Jun 2013 6 NA 2

yearmon 时间可能更可取,但如果时间与 x.zoo 时间相同对您来说很重要,那么请添加:

time(out) <- time(x.zoo)

更新:小改进。

关于r - 在 R 中一次对齐多个动物园对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com