2014-01-27 1 views
1

Я новичок в Mathematica и в настоящее время работает с данными временных рядов.как выполнять математические операции без удаления «NA» в данных временных рядов в математике

Я следующие входные данные в Mathematica 9,0

data = {{{2011, 3, 13}, 10}, {{2011, 3, 14}, "NA"}, {{2011, 3, 15}, 
    20}, {{2011, 3, 16}, 30}, {{2011, 3, 17}, "NA"}}; 

Как только я удалить «NA», данные становятся

data = {{{2011, 3, 13}, 10}, {{2011, 3, 15}, 
    20}, {{2011, 3, 16}, 30}} 

Я хочу сделать операцию по математике, такие как плюс , минус и среднее значение, не удаляя «NA» (я хочу сохранить последовательность даты).

Например, в случае, если я хочу, чтобы разделить значения со средним значением данных, мой выход может быть

data = {{{2011, 3, 13}, 0.5}, {{2011, 3, 14}, "NA"}, {{2011, 3, 15}, 
    1}, {{2011, 3, 16}, 1.5}, {{2011, 3, 17}, "NA"}}; 

Существуют ли какие-либо способы, которые Mathematica может это сделать? или любые предложения?

ответ

1
data = {{{2011, 3, 13}, 10}, {{2011, 3, 14}, "NA"}, {{2011, 3, 15}, 20}, 
     {{2011, 3, 16}, 30}, {{2011, 3, 17}, "NA"}} /. "NA" -> Undefined; 
mean = [email protected][data[[All, 2]], Except[Undefined]]; 
{#[[1]], #[[2]]/mean} & /@ data 
(* 
{{{2011, 3, 13}, 1/2}, {{2011, 3, 14}, Undefined}, 
{{2011, 3, 15}, 1}, {{2011, 3, 16}, 3/2}, 
{{2011, 3, 17}, Undefined}} 
*) 
+0

какой-либо причине вы использовали 'Undefined', а не как оставить его' "NA" '' или с помощью Missing [ "NotAvailable"] '? –

+1

@ Mr.Wizard 'Undefined/x == Undefined' Для всех x. Я вижу, что чище, чем '' NA '/ x' –

+0

Извините, я не понял, что 'Undefined' был системным символом в v8. +1 –

0

Вы могли бы рассмотреть возможность использования Indeterminate вместо "NA". В сочетании с числовым количеством вычисленный ею Indeterminate и т.д .:

1 + Indeterminate 
2 * Indeterminate 
Indeterminate 

Indeterminate 

Это упрощает tensor operations. Здесь с помощью DivideBy:

data = {{{2011, 3, 13}, 10}, {{2011, 3, 14}, "NA"}, {{2011, 3, 15}, 20}, 
     {{2011, 3, 16}, 30}, {{2011, 3, 17}, "NA"}}; 

data = data /. "NA" -> Indeterminate; 

data[[All, 2]] /= Mean @ Select[data[[All, 2]], NumericQ]; 

data 
{{{2011, 3, 13}, 1/2}, {{2011, 3, 14}, Indeterminate}, 
{{2011, 3, 15}, 1}, {{2011, 3, 16}, 3/2}, {{2011, 3, 17}, Indeterminate}} 
Смежные вопросы