在xts中添加元素

时间:2017-04-01 01:24:25

标签: r xts

我正在将我的脚本转换为使用xts而不是数据框,但却陷入了对不同行/列中的元素进行计算的困难。

实际上,我使用for循环遍历df行,并根据计算使用if-elses。

但是,为了简化问题,我可以在df中添加Col A Row 1和Col B Row 2,但不能在xts中添加....这里有一些示例代码:

> df <- data.frame(c(1:3),c(4:6))
> names(df) <- c('colA','colB')
> df
  colA colB
1    1    4
2    2    5
3    3    6
> df$colA[1] + df$colB[2]
[1] 6
> 
> 
> library(xts)
> x <- xts(df, order.by=as.Date(1:3))
> x
           colA colB
1970-01-02    1    4
1970-01-03    2    5
1970-01-04    3    6
> x$colA[1] + x$colB[2]
Data:
integer(0)

Index:
numeric(0)
> 

我有什么想法可以让它发挥作用?

1 个答案:

答案 0 :(得分:1)

当添加两个xts对象时,它们会合并以对齐时间然后添加。第1行和第2行没有公共索引,因此合并会生成一个空对象。

以下是一些替代方案:

1)[[单个[将返回另一个xts对象,但[[将无法避免此问题:

x$colA[[1]] + x$colB[[2]]
## [1] 6

2)coredata 在添加之前尝试显式转换为普通向量:

coredata(x$colA)[1] + coredata(x$colB)[2]
## [1] 6

3)c 在这里,我们将两个值重新整合到一个新的xts对象中,然后对该新对象中的值求和。

sum(c(x$colA[1], x$colB[2]))
## [1] 6