我有两个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