R 将一个xts除以另一个xts,并在此过程中创建一个新的xts

R 将一个xts除以另一个xts,并在此过程中创建一个新的xts,r,xts,R,Xts,我想把两个xts对象分开。每个xts具有相同的列数(具有相同的列名),但行数不同。我希望我的代码在其他xts中找到其各自的列,找到各自的日期值并将其除以,然后将新输出放入具有相同列的新xts中 例如: xts 1 xts 2 新xts Date V1 V2 2017-07-21 0.67 NA 2017-09-15 NA 1.28 下面是一个应用的解决方案: > t(apply(xts1, 1, function(d)as.numeric(xts

我想把两个xts对象分开。每个xts具有相同的列数(具有相同的列名),但行数不同。我希望我的代码在其他xts中找到其各自的列,找到各自的日期值并将其除以,然后将新输出放入具有相同列的新xts中

例如:

xts 1

xts 2

新xts

Date         V1     V2
2017-07-21  0.67    NA
2017-09-15   NA    1.28

下面是一个应用
的解决方案

> 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

下面是一个应用
的解决方案

> 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

我认为
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
>xts1 xts2 xts1/xts2
V1 V2
2017-07-21 0.6716418北美
2017-09-15 NA 0.78125
算术运算将尊重日期并在做任何事情之前匹配它们


希望这能有所帮助

我认为
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
>xts1 xts2 xts1/xts2
V1 V2
2017-07-21 0.6716418北美
2017-09-15 NA 0.78125
算术运算将尊重日期并在做任何事情之前匹配它们


希望这能有所帮助

谢谢您的帮助。非常有用。假设我有许多列(超过100列),我是否可以将“c('V1','V2')”更改为“names(xts1)”?或者更好的
names(xts1)[-1]
,因为否则在划分“Date”字段时会出现错误。我得到的是一条调试消息“if(!all)中的错误(谢谢你。非常有用。假设我有许多列(超过100列),我可以将“c('V1','V2')”更改为“names(xts1)”?或者更好的
names(xts1)[-1]
,否则在划分'Date'字段时会出错。我得到的是一条调试消息”if(!all)中的错误(感谢编辑@JoshuaUlrich,我将尝试在将来发布更完整的答案,这不是你的错。原始问题不可复制,你的答案很准确。我唯一想添加的是一个人们可以运行的示例,所以我这样做了。;-)感谢您编辑@JoshuaUlrich,我将尝试在未来发布更完整的答案,这不是您的错。原始问题不可复制,您的答案很准确。我唯一想添加的是一个人们可以运行的示例,所以我这样做了。;-)