сортировка таймера в Matlab - PullRequest
       8

сортировка таймера в Matlab

1 голос
/ 27 апреля 2010

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

таймер col в идеале должен быть

таймер, мой читает
1 3
2 4
3 5
4 6
5 1
6 2

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

спасибо

РЕДАКТИРОВАТЬ: я не хочу, чтобы изменить другие столбцы. Кулон 1 - это счетчик gps, поэтому он не синхронизируется с таймером компа из-за некоторых других проблем. Я просто хочу изменить одну строку так, чтобы она переходила от высокой к низкой, не затрагивая другие строки. также позаботьтесь о пропущенных очках (если бы я не позаботился о пропущенных очках, просто n = 1: max сработало бы.

Отсутствующие данные в этом случае обозначаются отсутствующим таймером. например у меня 4,5,8,9 с пропущенным 6,7

Хорошо, позвольте мне попробовать отредактировать это матрица данных 8600x80: таймер - это одна строка, которая должна идти от 0 до 8600 но таймер запускается в нечетное время, поэтому у меня есть начало данных с середины, скажем, 3400, так что в середине дня мой таймер переходит на 0, а затем обратно на 1. но другие мои ряды в порядке. Мне просто нужно 2 сюжета других наборов на основе таймера как времени. я не могу использовать T = 1: длина (файл), так как тогда он игнорирует пропущенные метки времени (таймеры)

например мои данные читаются как

таймер, мой читает
1 3
2 4
3 5
4 8
5 9
8 1
9 2

чтобы вы могли видеть, что отметки времени 6,7 отсутствуют. если бы я использовал n = 1: длина (файл) я бы получил 1 2 3 4 5 6 7 что неправильно я хочу 1 2 3 4 5 8 9

без изменения порядка других строк, поэтому я не могу использовать сортировку для всего файла.

1 Ответ

2 голосов
/ 27 апреля 2010

Я предполагаю следующую проблему

данные говорят

3 100
4 101
5 102
NaN 0
1 104
2 105

Вы хотите

1 100
2 101
3 102
NaN 0
4 104
5 105

Я бы решил проблему следующим образом:

%# create test data
data = [3 100
    4 101
    5 102
    NaN 0
    1 104
    2 105];

%# find good rows (if missing data are indicated by zeros, use 
%# goodRows = data(:,1) > 0;
goodRows = isfinite(data(:,1));

%# count good rows
nGoodRows = sum(goodRows);

%# replace the first column with sequential numbers, but only in good rows
data(goodRows,1) = 1:nGoodRows;

data =

     1   100
     2   101
     3   102
   NaN     0
     4   104
     5   105

РЕДАКТИРОВАТЬ 1

Может быть, я понимаю ваш вопрос на этот раз

данные говорят

4 101
5 102
1 104
2 105

Вы хотите

1 4 101
2 5 102
4 1 104
5 2 105

Это может быть достигнуто следующим образом

%# test data
data = [4 101
    5 102
    1 104
    2 105];

%# use sort to get the correct order of the numbers and add it to the left of data
out = [sort(data(:,1)),data]

out =

     1     4   101
     2     5   102
     4     1   104
     5     2   105

РЕДАКТИРОВАТЬ 2

Обратите внимание, что out является результатом решения в РЕДАКТИРОВАТЬ 1

Кажется, вы хотите построить данные так, чтобы не было записи для пропущенных значений. Один из способов сделать это - построить график с точками - не будет точки для отсутствующих данных.

plot(out(:,1),out(:,3),'.')

Если вы хотите построить линию, которая будет прервана, вы должны вставить NaN в out

%# create outNaN, that has NaN-rows for missing entries
outNaN = NaN(max(out(:,1)),size(out,2));
outNaN(out(:,1),:) = out;

%# plot
plot(out(:,1),out(:,3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...