如果 headers 是数字,如何按列对 xts-matrix 进行排序
How to sort xts-matrix by column if the headers are numbers
我有两个 xts-matrices(A 和 B)都以 "value1.value2" 的形式包含 headers。
此标签组合为两个矩阵保存为字符,以避免 R 将前缀 "X" 附加到数字。
A 和 B 已经标有它们的符号组合。
现在我想在 A 的右边 hand-side 附加矩阵 B(我使用 C <- cbind(A,B)
或 C <- merge.xts(A,B)
)。
合并或绑定它们会导致 R 在 headers 前面附加 X。
它无法被
撤消
colnames(C) <- as.character(colnames(C))
如果我想将数字用作 headers,我该如何摆脱它(请注意:这不是我正在加载的文件,我试图将输出放在一起)?
作为下一步,我想以递增的方式对列进行排序并尝试:
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
我有两个 xts-matrices(A 和 B)都以 "value1.value2" 的形式包含 headers。 此标签组合为两个矩阵保存为字符,以避免 R 将前缀 "X" 附加到数字。
A 和 B 已经标有它们的符号组合。
现在我想在 A 的右边 hand-side 附加矩阵 B(我使用 C <- cbind(A,B)
或 C <- merge.xts(A,B)
)。
合并或绑定它们会导致 R 在 headers 前面附加 X。
它无法被
撤消
colnames(C) <- as.character(colnames(C))
如果我想将数字用作 headers,我该如何摆脱它(请注意:这不是我正在加载的文件,我试图将输出放在一起)?
作为下一步,我想以递增的方式对列进行排序并尝试:
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