R xts计算多个系列的百分比指数
R xts calculating percentage index on multiple series
我有一个 xts
对象,其列数不断变化,但索引始终相同。我想根据每个系列的第一个元素获得一个百分比索引。
例如一个列:
library(xts)
x <- xts(1:10,as.Date("2012-12-21")+1:10)
x
z<-(x / drop(coredata(first(x, 1))))*100
z
如果可以更改列数,是否有办法 运行 在每一列上进行此计算?
给定一个像
这样的系列
x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
可以使用例如sapply
像这样:
xts(sapply(x, function(y) 100 * y / as.numeric(y[1, ])), index(x))
x.1 x.2
2012-12-22 100 100.0
2012-12-23 200 109.1
2012-12-24 300 118.2
2012-12-25 400 127.3
2012-12-26 500 136.4
2012-12-27 600 145.5
2012-12-28 700 154.5
2012-12-29 800 163.6
2012-12-30 900 172.7
2012-12-31 1000 181.8
您可以使用 apply
执行此操作,我更喜欢 apply
而不是 sapply
,因为 apply
将其第一个参数强制转换为矩阵。这简化了对每一列进行操作所需的功能。
我将使用 中的 x
。
R> x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
R> as.xts(apply(x, 2, function(v) 100*v/v[1]))
[,1] [,2]
2012-12-22 100 100.0000
2012-12-23 200 109.0909
2012-12-24 300 118.1818
2012-12-25 400 127.2727
2012-12-26 500 136.3636
2012-12-27 600 145.4545
2012-12-28 700 154.5455
2012-12-29 800 163.6364
2012-12-30 900 172.7273
2012-12-31 1000 181.8182
请注意,您不需要调用 coredata
或 drop
,因为 apply
首先将 x
强制转换为矩阵(通过调用 as.matrix.xts
).这意味着 v
是一个简单的数值向量。这也使得使用 as.xts
.
将 apply
的输出强制返回到 xts 对象变得更加容易。
我有一个 xts
对象,其列数不断变化,但索引始终相同。我想根据每个系列的第一个元素获得一个百分比索引。
例如一个列:
library(xts)
x <- xts(1:10,as.Date("2012-12-21")+1:10)
x
z<-(x / drop(coredata(first(x, 1))))*100
z
如果可以更改列数,是否有办法 运行 在每一列上进行此计算?
给定一个像
这样的系列x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
可以使用例如sapply
像这样:
xts(sapply(x, function(y) 100 * y / as.numeric(y[1, ])), index(x))
x.1 x.2
2012-12-22 100 100.0
2012-12-23 200 109.1
2012-12-24 300 118.2
2012-12-25 400 127.3
2012-12-26 500 136.4
2012-12-27 600 145.5
2012-12-28 700 154.5
2012-12-29 800 163.6
2012-12-30 900 172.7
2012-12-31 1000 181.8
您可以使用 apply
执行此操作,我更喜欢 apply
而不是 sapply
,因为 apply
将其第一个参数强制转换为矩阵。这简化了对每一列进行操作所需的功能。
我将使用 x
。
R> x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
R> as.xts(apply(x, 2, function(v) 100*v/v[1]))
[,1] [,2]
2012-12-22 100 100.0000
2012-12-23 200 109.0909
2012-12-24 300 118.1818
2012-12-25 400 127.2727
2012-12-26 500 136.3636
2012-12-27 600 145.4545
2012-12-28 700 154.5455
2012-12-29 800 163.6364
2012-12-30 900 172.7273
2012-12-31 1000 181.8182
请注意,您不需要调用 coredata
或 drop
,因为 apply
首先将 x
强制转换为矩阵(通过调用 as.matrix.xts
).这意味着 v
是一个简单的数值向量。这也使得使用 as.xts
.
apply
的输出强制返回到 xts 对象变得更加容易。