r-如果标题是数字,如何按列对xts矩阵进行排序



我有两个xts矩阵(A和B(都包含"value1.value2"形式的标头。这两个矩阵的标签组合都保存为字符,以避免R将前缀"X"附加到数字上。

A和B已经用它们的符号组合进行了标记。

现在我想把矩阵B附加在A的右边(我使用了C <- cbind(A,B)C <- merge.xts(A,B)(。

合并或绑定它们会导致R将X附加到标头前面。
colnames(C) <- as.character(colnames(C))无法撤消

如果我想使用数字作为标题,我该如何处理它(请注意:这不是我正在加载的文件,我正试图将其合并到输出中(?

作为下一步,我想以增加的方式订购列,并尝试:

C <- C[,sort(colnames(C), decreasing = F)]

但R完全打乱了顺序,似乎随意排列了列。我还尝试了as.data.frame(cbind(A,B))并对数据帧进行排序,但它没有任何改进。

我很高兴收到宝贵的建议。

不幸的是,我无法提供一个最低限度的工作示例。

非常感谢!

您可以根据单个xts对象中的colnames重命名colnames,也可以使用类似substring(colnames(C), 2)的子字符串。

创建数据示例:

library(xts)
A <- matrix(1:20, ncol = 2)
colnames(A) <- c("10.20", "20.01")
B <- matrix(20:1, ncol = 2)
colnames(B) <- c("10.10", "10.01")
# as xts objects
A <- as.xts(A, order.by = seq.Date(Sys.Date() - 9, Sys.Date(), by = "day"))
B <- as.xts(B, order.by = seq.Date(Sys.Date() - 9, Sys.Date(), by = "day"))
C <- merge(A, B)
# rename colnames to names before merge to get rid of X in front of name
colnames(C) <- c(colnames(A), colnames(B))
# alternative use substring: 
# colnames(C) <- substring(colnames(C), 2)
C[, sort(colnames(C), decreasing = F)]
10.01 10.10 10.20 20.01
2020-03-08    10    20     1    11
2020-03-09     9    19     2    12
2020-03-10     8    18     3    13
2020-03-11     7    17     4    14
2020-03-12     6    16     5    15
2020-03-13     5    15     6    16
2020-03-14     4    14     7    17
2020-03-15     3    13     8    18
2020-03-16     2    12     9    19
2020-03-17     1    11    10    20

最新更新