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: Очевидно, я знаю, что мы можем просто выполнить прямую команду "cbind" на a, b, c, d, e, f перепуск m1 а также m2Мне нужны эти промежуточные матрицы в цикле.

2 ответа

Не могу объяснить почему, но 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"

Там нет никакого способа предотвратить 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)))
Другие вопросы по тегам