2015-03-27 7 views
0

Вот простой пример, который работает отлично: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, но мне нужно это промежуточное поставил матрицы в цикле.

+1

В вашем примере опечатка. Пожалуйста, исправьте это. –

+1

(... опечатка разрешено, спасибо.) –

ответ

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

большое спасибо zx8754, я ценю это, но если вы не возражаете, я оставлю этот вопрос открытым еще немного. –

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))) 
+0

Я нехороший Аскер ... большое спасибо Джошуа, но это именно то, чего я пытался избежать :-) –

+0

Учитывая предоставленную вами информацию, я не вижу никакого способа избежать этого. Если вы предоставите более подробную информацию о своей реальной проблеме, кто-то может дать вам решение, которое позволит избежать подобных действий. –

+0

Здравствуйте, еще раз Джошуа, я хочу избежать назначения имен команд вручную. Я делал это по-своему с:. COLNAMES (M) = с (COLNAMES (m1), COLNAMES (m2) непосредственно после cbind (Из интереса, есть дополнительное преимущество использования «сделать .names() "вокруг моей команды" c()?) Решение, предоставленное zx8754, приближается к тому, чтобы бить мой/наш текущий способ сделать это, но cbind.data.frame также требует дополнительной команды, потому что класс (M) теперь «data.frame», и я работаю с данными временного ряда. Что вы бы сделали? Еще раз спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^