2010-04-08 56 views
4

我在xts R对象中有三个向量。给他们打电话V1,V2,V3。合并后,它们从左到右的顺序是V2,V3,V1。我如何重新排列它们,使它们从V1,V2,V3读取(从左到右)?如何在R中重新排列向量顺序?

回答

4

您可以直接引用的列并重新分配他们:

x <- x[,c(2,3,1)] 

这里有一个工作示例:

> data(sample_matrix) 
> x <- head(as.xts(sample_matrix, descr='my new xts object'))[,c(1,2,3)] 
> x 
       Open  High  Low 
2007-01-02 50.03978 50.11778 49.95041 
2007-01-03 50.23050 50.42188 50.23050 
2007-01-04 50.42096 50.42096 50.26414 
2007-01-05 50.37347 50.37347 50.22103 
2007-01-06 50.24433 50.24433 50.11121 
2007-01-07 50.13211 50.21561 49.99185 
> x <- x[,c(2,3,1)] 
> x 
       High  Low  Open 
2007-01-02 50.11778 49.95041 50.03978 
2007-01-03 50.42188 50.23050 50.23050 
2007-01-04 50.42096 50.26414 50.42096 
2007-01-05 50.37347 50.22103 50.37347 
2007-01-06 50.24433 50.11121 50.24433 
2007-01-07 50.21561 49.99185 50.13211 
+0

非常感谢。我将在未来记住这个记号。我做了一个不太优雅的解决方法。我的最终数据框是三个合并向量的结果,所以我只是重新安排了合并它们的顺序。 (V2,V1,V2) 原因:合并(V2,V1,V2) 解决方法:合并(V1,V2,V3) – Milktrader 2010-04-08 02:59:08

0

值得一提的是,当你能够通过引用的列名称以生成新的对象和列,ala

xts.object$V1plusV2 <- xts.object[, "V1"] + xts.object[, V2"] , 

您不能通过名称重新排列列。以下是不允许的

xts.reordered <- xts.object[, c("V3, V2, V1")] . 

相反,正如Shane指出的那样,您需要通过编号引用列。