我希望将两个xts对象相互分开。每个xts具有相同数量的列(具有相同的列名称)但行数不同。我希望我的代码在其他xts中找到它各自的列并找到相应的日期值并除以它们然后将新输出放在具有相同列的新xts中。
例如:
xts 1
Date V1 V2
2017-07-21 4.5 NA
2017-09-15 NA 2.5
xts 2
Date V1 V2
2017-06-15 12.9 10.7
2017-07-21 6.7 2.2
2017-08-13 7.9 8.3
2017-09-15 4.5 3.2
新xts
Date V1 V2
2017-07-21 0.67 NA
2017-09-15 NA 1.28
答案 0 :(得分:1)
我认为xts
库实际上是一个非常神奇的工具,它会自动执行
> xts1 <- structure(c(4.5, NA, NA, 2.5), .Dim = c(2L, 2L),
.Dimnames = list(NULL, c("V1", "V2")),
index = structure(c(1500595200, 1505433600), tzone = "UTC", tclass = "Date"),
class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date",
.indexTZ = "UTC", tzone = "UTC")
> xts2 <- structure(c(12.9, 6.7, 7.9, 4.5, 10.7, 2.2, 8.3, 3.2),
.Dim = c(4L, 2L), .Dimnames = list(NULL, c("V1", "V2")),
index = structure(c(1497484800, 1500595200, 1502582400, 1505433600),
tzone = "UTC", tclass = "Date"),
class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date",
.indexTZ = "UTC", tzone = "UTC")
> xts1 / xts2
V1 V2
2017-07-21 0.6716418 NA
2017-09-15 NA 0.78125
算术运算会在做任何事情之前尊重日期并匹配它们。
希望有所帮助
答案 1 :(得分:0)
以下是apply
的解决方案:
> t(apply(xts1, 1, function(d)as.numeric(xts1[d[1],c('V1', 'V2')])/as.numeric(xts2[d[1],c('V1', 'V2')])))
[,1] [,2]
2017-07-21 0.6716418 NA
2017-09-15 NA 0.78125