我正在将我的脚本转换为使用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)
>
我有什么想法可以让它发挥作用?
答案 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