总之,我希望向 XTS 对象添加一个累积量列。 但是,在调用do.call(rbind...我发现原来的 XTS 被覆盖了。

# Reproducible example data
foo <- rnorm(5)
bar <- seq(as.Date("1970-01-01"), length = 5, by = "days")
foobar <- xts(x = foo, order.by = bar)
names(foobar)[1] <- "Volume"
# My processing ...
foobar_months <- split(foobar[,"Volume"],f="months")
foobar_vol_mtd <- lapply(foobar_months,FUN=cumsum)
# This is what is not working for me because Volume overwrites original Volume
foobar <- do.call(rbind,foobar_vol_mtd) 

#1楼 票数:1 已采纳

函数do.call(rbind, list)将对所有列表元素进行 rbind。 您没有将该列表附加到原始列表中。 你可以做的是:

foobar2 <- do.call(rbind,foobar_vol_mtd)
foobar <- rbind(foobar, foobar2)

将该列表中的所有元素绑定在一起,然后将结果绑定到原始元素。

结果:

               Volume
1970-01-01  0.8995890
1970-01-01  0.8995890
1970-01-02 -0.5057975
1970-01-02  0.3937916
1970-01-03 -0.1861275
1970-01-03  0.2076641
1970-01-04 -1.1641303
1970-01-04 -0.9564663
1970-01-05  0.3157536
1970-01-05 -0.6407127

由于rnorm(5)和没有种子集,结果会有所不同。

作为新列追加

正如我所说, rbind追加新行并且所有列都应该相同。 如果要附加为新列,请尝试:

foobar2 <- do.call(rbind,foobar_vol_mtd)
foobar3 = merge(foobar, foobar2)

我对这种情况的结果是(新的随机值,所以不要与上面比较):

                Volume  Volume.1
1970-01-01  1.96291153 1.9629115
1970-01-02 -0.41771710 1.5451944
1970-01-03 -0.08827657 1.4569179
1970-01-04 -0.57243569 0.8844822
1970-01-05 -0.06093953 0.8235426

然后使用names(foobar)[2] = "new_name"更改列名。

您还可以在合并之前重命名:

foobar2 <- do.call(rbind,foobar_vol_mtd)
names(foobar2) = 'newname'
foobar3 = merge(foobar, foobar2)

合并将像以前一样由时间索引完成。

  ask by Little Code translate from so

未解决问题?本站智能推荐:

1回复

是否有解决R2.15.2中do.call(cbind.xts,...)性能降低的问题?

我希望cbind.xts和do.call(cbind.xts)能够以相似的经过时间执行。 R2.11,R2.14也是如此。 对于R2.15.2和xts 0.8-8, do.call(cbind.xts,...)变体执行速度非常慢 ,这有效地破坏了我之前的代码。 正如Josh Ulric
2回复

如何在循环中使用do.call和cbind与对象列表绑定?

我使用do.call和cbind将几个xts对象组装成一个更通用的容器data 。 我的目标是实现一个循环,以直接通过向量中的对象名称添加对象。 这是原始的do.call : 列表包含xts对象, data也是xts对象。 当我使用xts对象的名称定义一个向量时: 然后尝试通过
1回复

R:do.callwithmerge和eapply

我正在合并两个带有 join="left" 的 xts 对象,即(左侧对象中的所有行,以及右侧匹配的行)。 我在 myEnv 中加载了这些对象。 到目前为止,它按预期工作,因为上述合并对象中的时间索引是从 APPL 中获取的。 问题是,当我更改代码的顺序以使 FB 排在第一位时,合并的对象仍会从 A
1回复

R中大于0时如何选择列名及其值?

我有一个xts对象,其中包含几行,每行一个数值,我需要选择名称和列的值,其中对于n-1天,值大于0。 我使用它来为值> 0的行选择列的名称,但仅在有一列的情况下才起作用。 我的xts对象可以有几个。 请找到xts对象xxx外观: 我想在第n-1天将这样的对象放下: 或者,
1回复

R:为什么列名中的某些特殊字符会被自动替换?

在xts时间序列或数据帧的某些列中,我有一个特殊字符,例如〜。 这没有问题。 但是,一些代码行用〜代替了这些〜。 这是一个问题。 例如,merge.xts替换这些字符。 我该如何避免呢? 我当前的解决方法是在对列名称进行任何操作之后再次重命名它们,但我希望有一个更简单的解决方案?
3回复

在R中使用%dopar%代替%do%时出错(软件包doParallel)

我提出了一个奇怪的错误。 假设我在名为data的列表中有10个xts对象。 我现在使用搜索每三个组合 我的基本目标是在这1080个三元组上进行PCA。 为了加快速度,我想使用软件包doParallel 。 因此,这里的代码段缩短到了发生错误的地步: 在这里,合并功能似乎是问题所在
2回复

rbind.zoo(...):索引重叠错误

我正在尝试将函数应用于xts对象。 我正在使用ave函数将功能分别应用到每一天。 该函数抛出以下错误: 我调试了这个函数,当我尝试使用以下行将-Inf转换为NA时抛出错误: x[x == -Inf] <- NA 。 这是一个最小的可重复示例,仅通过ave函数应用函数的有问题的行
2回复

R在xts图中设置xlim

我正在尝试扩展我的时间序列图的X轴,以便为以后在图中添加新数据做好准备。 但是,无论我尝试什么,我都会在plot.window(...)中得到错误:无效的'xlim'值错误。 这是一个最小的代码片段: 数据构建: 绘图: 正如预期的那样,结果是一个很好的时间序列图。 现在,