时间序列数据中的cbind

时间:2015-03-27 10:02:03

标签: r cbind

这是一个很好的简单示例:

a = 1; b = 2; c = 3
d = 65; e = 66; f = 77
m1 = cbind(a, b, c); m2 = cbind(d, e, f); M = cbind(m1, m2)
colnames(M)
#   [1] "a" "b" "c" "d" "e" "f"

但是,现在尝试使用时间序列数据完全相同:

a = 1; b = 2; c = 3
d = 65; e = 66; f = 77
m1 = as.ts(cbind(a, b, c)); m2 = as.ts(cbind(d, e, f)); M = cbind(m1, m2)
colnames(M)
#   [1] "m1.a" "m1.b" "m1.c" "m2.d" "m2.e" "m2.f"'

如何为时间序列数据避免使用这些前缀? (即:前缀m1.m2.

PS:显然我知道我们可以在a, b, c, d, e, f上绕过m1m2直接执行“cbind”命令,但是我需要在循环中使用这些中间阶段矩阵。

2 个答案:

答案 0 :(得分:0)

无法解释原因,但cbind.data.frame对两者的作用相同:

a = 1; b = 2; c = 3
d = 65; e = 66; f = 77
m1 = cbind(a, b, c)
m2 = cbind(d, e, f)
M = cbind.data.frame(m1, m2)
colnames(M)
#[1] "a" "b" "c" "d" "e" "f"

m1 = as.ts(cbind(a, b, c))
m2 = as.ts(cbind(d, e, f))
M = cbind.data.frame(m1, m2)
colnames(M)
#[1] "a" "b" "c" "d" "e" "f"

答案 1 :(得分:0)

没有办法阻止cbind.ts这样做。阻止它的常用方法是设置deparse.level=0,但cbind.ts会忽略它。

R> stats:::cbind.ts
function (..., deparse.level = 1) 
{
    if (deparse.level != 1) 
        .NotYetUsed("deparse.level != 1")
    .cbind.ts(list(...), .makeNamesTs(...), dframe = FALSE, union = TRUE)
}
<bytecode: 0x35531f8>
<environment: namespace:stats>

您可以随时自行设置colnames,只需注意它们是“有效的”(例如通过make.names)而不是重复,否则您的分析可能会在以后遇到问题。

colnames(M) <- make.names(c(colnames(m1), colnames(m2)))