Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R cbind xts对象导致添加/重复行_R_Merge_Duplicates_Xts - Fatal编程技术网

R cbind xts对象导致添加/重复行

R cbind xts对象导致添加/重复行,r,merge,duplicates,xts,R,Merge,Duplicates,Xts,我想将三个xts对象与cbind合并在一起: > OIH.tmp <- structure(c(NA, 7.7, 5.1, -6.9, -2.6), index = structure(c(1325221200, 1327986000, 1330491600, 1333080000, 1334894400), tzone = "", tclass = "yearmon"), tclass = "Date", tzone = "", src = "yahoo", updated =

我想将三个xts对象与
cbind
合并在一起:

> OIH.tmp <-
structure(c(NA, 7.7, 5.1, -6.9, -2.6), index = structure(c(1325221200, 
1327986000, 1330491600, 1333080000, 1334894400), tzone = "", tclass = "yearmon"),
tclass = "Date", tzone = "", src = "yahoo", updated = structure(1335041586.83363,
class = c("POSIXct", "POSIXt")), .indexTZ = "", .indexCLASS = "yearmon",
.Dim = c(5L, 1L), .Dimnames = list(NULL, "OIH"), class = c("xts", "zoo"))

> SMH.tmp <-
structure(c(NA, 9.3, 2.9, 3.7, -5), index = structure(c(1325134800, 
1327986000, 1330491600, 1333080000, 1334894400), tzone = "", tclass = "yearmon"),
tclass = "Date", tzone = "", src = "yahoo", updated = structure(1335041596.41175,
class = c("POSIXct", "POSIXt")), .indexTZ = "", .indexCLASS = "yearmon",
.Dim = c(5L, 1L), .Dimnames = list(NULL, "SMH"), class = c("xts", "zoo"))

> SU.tmp <-
structure(c(NA, -9.4, -6.9, -2.3, -18.1, -22.6, 22.7, -6.1, -4, 
18, 4.1, -9.4, -4.7), index = structure(c(1304049600, 1306814400, 
1309406400, 1311912000, 1314763200, 1317355200, 1320033600, 1322629200, 
1325221200, 1327986000, 1330491600, 1333080000, 1334894400), tzone = "",
tclass = "yearmon"), tclass = "Date", tzone = "", src = "yahoo", 
updated = structure(1335041613.0055, class = c("POSIXct", "POSIXt")),
.indexTZ = "", .indexCLASS = "yearmon", .Dim = c(13L, 1L),
.Dimnames = list(NULL, "SU"), class = c("xts", "zoo"))

> cbind(OIH.tmp, SU.tmp, SMH.tmp)
          OIH    SU  SMH
Apr 2011   NA    NA   NA
May 2011   NA  -9.4   NA
Jun 2011   NA  -6.9   NA
Jul 2011   NA  -2.3   NA
Aug 2011   NA -18.1   NA
Sep 2011   NA -22.6   NA
Oct 2011   NA  22.7   NA
Nov 2011   NA  -6.1   NA
Dec 2011   NA    NA   NA
Dec 2011   NA  -4.0   NA
Jan 2012  7.7  18.0  9.3
Feb 2012  5.1   4.1  2.9
Mar 2012 -6.9  -9.4  3.7
Apr 2012 -2.6  -4.7 -5.0
>OIH.tmp SMH.tmp SU.tmp cbind(OIH.tmp,SU.tmp,SMH.tmp)
艾素珊
2011年4月娜娜娜娜
2011年5月不适用-9.4不适用
2011年6月不适用-6.9不适用
2011年7月不适用-2.3不适用
2011年8月北美-18.1北美
2011年9月不适用-22.6不适用
2011年10月北美22.7北美
2011年11月不适用-6.1不适用
2011年12月不适用
2011年12月不适用-4.0不适用
2012年1月7.718.09.3
2012年2月5.1 4.1 2.9
2012年3月-6.9-9.4 3.7
2012年4月-2.6-4.7-5.0
请注意,2011年12月有一个额外的/重复的行,我不想要。我可以想出一些杂乱无章的方法来实现我的最终目标(),但我确信一定有更简单/优雅的方法——也许通过一个对象的索引进行合并。这看起来很简单,但我已经阅读了cbind和merge的文档,还没有找到一个简单的解决方案

实际上,我有一系列要合并的对象。我只是用你在这里看到的3来说明这个问题。我实际上使用以下命令来构造返回序列:

oneMonthReturn <- do.call(merge, lapply(tickers.tmp, function(x) 
  round(ROC(Cl(to.monthly(get(x, myEnv))),1) * 100, 1) ))

> dput(tickers.tmp)
c("DJI", "GSPC", "IXIC", "GSPTSE", "XLE", "OIH", "XOP", "XLI", 
"XLB", "XLF", "XRT", "XLK", "SMH", "XLY", "XLP", "XLU", "XLV", 
"PPH", "MOO", "GLD", "SLV", "GDX", "TLT", "X", "SU", "TCK", "ACHN", 
"IDIX", "AGU")


> dput(oneMonthReturn)
structure(c(NA, -1.9, -1.2, -2.2, -4.5, -6.2, 9.1, 0.8, NA, 1.4, 
3.3, 2.5, 2, -1.4, NA, -1.4, -1.8, -2.2, -5.8, -7.4, 10.2, -0.5, 
NA, 0.8, 4.3, 4, 3.1, -2.1, NA, -1.3, -2.2, -0.6, -6.6, -6.6, 
10.6, -2.4, NA, -0.6, 7.7, 5.3, 4.1, -3, NA, -1, -3.7, -2.7, 
-1.4, -9.4, 5.3, -0.4, NA, -2.1, 4.1, 1.5, -2, -2, NA, -4.3, 
-2.3, 1.4, -10.8, -16, 17.5, 1.7, NA, -2.5, 2.2, 5.8, -4.3, -4, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 7.7, 5.1, -6.9, -2.6, 
NA, -4.5, -3.5, 5.7, -14.8, -22.5, 22.8, 2.4, NA, -4.6, 3.5, 
8.3, -4.1, -7.7, NA, -2.8, -1, -7.1, -6.8, -10.3, 13.4, 1.4, 
NA, -0.4, 7.1, 2.8, 0.5, -1.8, NA, -2.8, -1, -3.5, -7.3, -18.5, 
16, 0.2, NA, -3, 10.4, -0.6, 0, -1.3, NA, -3.4, -3.1, -3.6, -10.1, 
-12.5, 13.4, -5.2, NA, 1.5, 7.8, 4.9, 6.8, -3.9, NA, 1.5, -1.4, 
-0.2, -7.1, -7.1, 12.9, -1.3, NA, 1.3, 4.8, 6.5, 3.9, -0.5, NA, 
-1.1, -2.9, 0.4, -5.5, -3.5, 9.7, -1.5, NA, -0.7, 6, 6.9, 4.1, 
-3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9.3, 2.9, 3.7, -5, 
NA, -0.3, -0.6, -1.4, -5.4, -7.5, 11.3, -0.7, NA, 0.7, 5.7, 4.4, 
4.3, -1, NA, 2.5, -3.4, -1.3, 0.2, -4.1, 4.5, 2.7, NA, 1.8, -1.4, 
3.7, 2.5, 0.7, NA, 2.1, -1.2, -0.9, 2.1, -0.8, 3.6, 1, NA, 2.2, 
-3.7, 0.6, 0.4, -0.1, NA, 2.4, -1.6, -4, -2.1, -5.1, 5.6, 0.9, 
NA, 2.4, 3.1, 1.1, 3.9, -0.9, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 0, 2.5, 3, 0.2, NA, -2.4, -3.1, 0.6, -3.6, -18.9, 14.6, 
-1.6, NA, -4.4, 8.5, 2.5, 0.4, -1.5, NA, -1.8, -2.5, 8.1, 11.6, 
-11.7, 5.7, 1.7, NA, -11.3, 10.8, -3, -1.3, -1.6, NA, -22.1, 
-10.5, 13.8, 4, -33.6, 14.6, -4.4, NA, -17.2, 18.1, 3.9, -6.7, 
-2, NA, -6.7, -6.3, 4.1, 9.9, -12.9, 6.4, 2.7, NA, -16.1, 9.3, 
-1.9, -11.2, -7.2, NA, 2.9, -2.7, 4, 8.9, 12.1, -4.2, 1.7, NA, 
2.8, -0.3, -2.9, -4.6, 4.2, NA, -3.4, -0.2, -14.1, -28.4, -31.3, 
14.2, 7.4, NA, -3.1, 13.2, -10.4, 7.6, -1.3, NA, -9.4, -6.9, 
-2.3, -18.1, -22.6, 22.7, -6.1, NA, -4, 18, 4.1, -9.4, -4.7, 
NA, -3.1, -3.5, -2.6, -10.9, -41.8, 31.8, -9.4, NA, -3.6, 18.4, 
-5.7, -11.4, 3.5, NA, 29.4, -0.7, -0.4, -18.8, -26.3, 29.2, 5.1, 
NA, 13.6, 37.5, -5.5, -9.2, -14.6, NA, -6.7, 5.1, 29, -14, -15.2, 
18.4, 23.6, NA, -2, 58.6, -12.8, -18.5, -16.9, NA, -2.7, -0.3, 
-0.4, -1.6, -25.4, 21.1, -16.2, NA, -4.2, 17.9, 5.9, 1.4, 0.2
), .Dim = c(14L, 29L), .Dimnames = list(NULL, c("DJI", "GSPC", 
"IXIC", "GSPTSE", "XLE", "OIH", "XOP", "XLI", "XLB", "XLF", "XRT", 
"XLK", "SMH", "XLY", "XLP", "XLU", "XLV", "PPH", "MOO", "GLD", 
"SLV", "GDX", "TLT", "X", "SU", "TCK", "ACHN", "IDIX", "AGU")), index = structure(c(1304049600, 
1306814400, 1309406400, 1311912000, 1314763200, 1317355200, 1320033600, 
1322629200, 1325134800, 1325221200, 1327986000, 1330491600, 1333080000, 
1334894400), tzone = "", tclass = "yearmon"), .indexTZ = "", .indexCLASS = "yearmon", tclass = c("POSIXct", 
"POSIXt"), tzone = "", src = "yahoo", updated = structure(1335041583.80238, class = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"))
oneMonthReturn dput(tickers.tmp)
c(“DJI”、“GSPC”、“IXIC”、“GSPTSE”、“XLE”、“OIH”、“XOP”、“XLI”,
“XLB”、“XLF”、“XRT”、“XLK”、“SMH”、“XLY”、“XLP”、“XLU”、“XLV”,
“PPH”、“MOO”、“GLD”、“SLV”、“GDX”、“TLT”、“X”、“SU”、“TCK”、“ACHN”,
“IDIX”、“AGU”)
>dput(一个月一次)
结构(c(NA,-1.9,-1.2,-2.2,-4.5,-6.2,9.1,0.8,NA,1.4,
3.3,2.5,2,-1.4,NA,-1.4,-1.8,-2.2,-5.8,-7.4,10.2,-0.5,
NA,0.8,4.3,4,3.1,-2.1,NA,-1.3,-2.2,-0.6,-6.6,
10.6,-2.4,NA,-0.6,7.7,5.3,4.1,-3,NA,-1,-3.7,-2.7,
-1.4,-9.4,5.3,-0.4,NA,-2.1,4.1,1.5,-2,-2,NA,-4.3,
-2.3,1.4,-10.8,-16,17.5,1.7,NA,-2.5,2.2,5.8,-4.3,-4,
不,不,不,不,不,不,不,不,不,不,不,7.7,5.1,-6.9,-2.6,
NA,-4.5,-3.5,5.7,-14.8,-22.5,22.8,2.4,NA,-4.6,3.5,
8.3,-4.1,-7.7,NA,-2.8,-1,-7.1,-6.8,-10.3,13.4,1.4,
NA,-0.4,7.1,2.8,0.5,-1.8,NA,-2.8,-1,-3.5,-7.3,-18.5,
16,0.2,NA,-3,10.4,-0.6,0,-1.3,NA,-3.4,-3.1,-3.6,-10.1,
-12.5,13.4,-5.2,NA,1.5,7.8,4.9,6.8,-3.9,NA,1.5,-1.4,
-0.2,-7.1,-7.1,12.9,-1.3,NA,1.3,4.8,6.5,3.9,-0.5,NA,
-1.1,-2.9,0.4,-5.5,-3.5,9.7,-1.5,NA,-0.7,6,6.9,4.1,
-3,不,不,不,不,不,不,不,不,不,不,不,9.3,2.9,3.7,-5,
NA,-0.3,-0.6,-1.4,-5.4,-7.5,11.3,-0.7,NA,0.7,5.7,4.4,
4.3,-1,NA,2.5,-3.4,-1.3,0.2,-4.1,4.5,2.7,NA,1.8,-1.4,
3.7,2.5,0.7,NA,2.1,-1.2,-0.9,2.1,-0.8,3.6,1,NA,2.2,
-3.7,0.6,0.4,-0.1,NA,2.4,-1.6,-4,-2.1,-5.1,5.6,0.9,
NA,2.4,3.1,1.1,3.9,-0.9,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,0,2.5,3,0.2,NA,-2.4,-3.1,0.6,-3.6,-18.9,14.6,
-1.6,NA,-4.4,8.5,2.5,0.4,-1.5,NA,-1.8,-2.5,8.1,11.6,
-11.7,5.7,1.7,NA,-11.3,10.8,-3,-1.3,-1.6,NA,-22.1,
-10.5,13.8,4,-33.6,14.6,-4.4,NA,-17.2,18.1,3.9,-6.7,
-2,NA,-6.7,-6.3,4.1,9.9,-12.9,6.4,2.7,NA,-16.1,9.3,
-1.9,-11.2,-7.2,不适用,2.9,-2.7,4,8.9,12.1,-4.2,1.7,不适用,
2.8、-0.3、-2.9、-4.6、4.2、NA、-3.4、-0.2、-14.1、-28.4、-31.3、,
14.2,7.4,NA,-3.1,13.2,-10.4,7.6,-1.3,NA,-9.4,-6.9,
-2.3、-18.1、-22.6、22.7、-6.1、NA、-4、18、4.1、-9.4、-4.7、,
NA,-3.1,-3.5,-2.6,-10.9,-41.8,31.8,-9.4,NA,-3.6,18.4,
-5.7,-11.4,3.5,NA,29.4,-0.7,-0.4,-18.8,-26.3,29.2,5.1,
NA,13.6,37.5,-5.5,-9.2,-14.6,NA,-6.7,5.1,29,-14,-15.2,
18.4,23.6,NA,-2,58.6,-12.8,-18.5,-16.9,NA,-2.7,-0.3,
-0.4,-1.6,-25.4,21.1,-16.2,NA,-4.2,17.9,5.9,1.4,0.2
),.Dim=c(14L,29L),.Dimnames=list(NULL,c(“DJI”,“GSPC”),
“IXIC”、“GSPTSE”、“XLE”、“OIH”、“XOP”、“XLI”、“XLB”、“XLF”、“XRT”,
“XLK”、“SMH”、“XLY”、“XLP”、“XLU”、“XLV”、“PPH”、“MOO”、“GLD”,
“SLV”、“GDX”、“TLT”、“X”、“SU”、“TCK”、“ACHN”、“IDIX”、“AGU”)),指数=结构(c(1304049600,
1306814400, 1309406400, 1311912000, 1314763200, 1317355200, 1320033600, 
1322629200, 1325134800, 1325221200, 1327986000, 1330491600, 1333080000, 
1334894400),tzone=“”,tclass=“yearmon”),.indexTZ=“”,.indexCLASS=“yearmon”,tclass=c(“POSIXct”,
“POSIXt”,tzone=“”,src=“yahoo”,updated=structure(1335041583.80238,class=c(“POSIXct”),
类=c(“xts”,“动物园”))
谢谢你的帮助

这应该可以做到(在更简单的daya,因为您没有发布数据的
dput()
):

对于具有多个列的多重合并(使用Dirk的数据),可以使用
Reduce
函数。我将用法包装在一个函数中,您可以对其进行调整以满足您的需要。正确回答这个问题的功劳应该归于德克,因为他已经正确回答了,这只是一种替代方法,因为我在一个周六晚上很无聊:)天哪,我甚至不知道xts是干什么用的

multi.xts.merge <- function(listOguys) {
    dat <- Reduce(function(x, y) {merge.xts(x, y)}, listOguys)
    names(dat) <- as.character(substitute(listOguys))[-1]
    return(dat)
}

multi.xts.merge(list(OIH, SU, SMH))

multi.xts.merge您调用
to.monthly
的问题,而不是
merge.xts
(如我最初所想)。此解决方案不适用于当前CRAN上的xts版本,但适用于R-forge的613版或更高版本

出现问题的原因是,
to.monthly
将序列与实际指数中周期的最后一个时间对齐,而不是周期的理论最后一个时间;默认情况下,它不会删除索引的时间组件。在您的情况下,对于
SMH
,2011-12的最后一次时间是2011-12-29,对于其他两个对象,是2011-12-30

如果您设置了
drop.time=TRUE
(同样,只有当前版本的xts适用于R-forge),结果与您预期的一样:

oneMonthReturn <- do.call(merge, lapply(tickers.tmp, function(x) 
  round(ROC(Cl(to.monthly(get(x, myEnv),drop.time=TRUE)),1) * 100, 1) ))

oneMonthReturn请添加到问题中,以某种方式轻松构建数据。对您来说,一个简单的方法(但不完全是人类可读的)是粘贴dput(OIH.tmp)的输出,等等,当然,除非您已经有人类可读的命令。我没有解决办法,但我对这个问题感兴趣。@MatthewLundberg-谢谢你的快速回答。我刚刚用更多的信息更新了我的帖子
multi.xts.merge <- function(listOguys) {
    dat <- Reduce(function(x, y) {merge.xts(x, y)}, listOguys)
    names(dat) <- as.character(substitute(listOguys))[-1]
    return(dat)
}

multi.xts.merge(list(OIH, SU, SMH))
oneMonthReturn <- do.call(merge, lapply(tickers.tmp, function(x) 
  round(ROC(Cl(to.monthly(get(x, myEnv),drop.time=TRUE)),1) * 100, 1) ))