2017-04-01 97 views
0

我正在將腳本轉換爲使用xts而不是數據框,但在跨不同的行/列中的元素進行計算時遇到困難。在xts中添加元素

實際上,我使用for循環遍歷df行,並使用基於計算的if-elses。

但是,爲了簡化問題,我可以補充說柱A排1色柱B第2行就好在DF,但不是在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

當添加兩個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 
+0

太棒了!非常感謝答覆和解釋。乾杯,simmo。 – simmo

+0

@simmo:請參閱[當某人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers)。 –

+0

瞭解它,排序....謝謝@JoshuaUlrich – simmo