2014-02-05 3 views
0

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


Формат таков: три колонки:

  • Колонка 1 представляет собой метку времени
  • столбец 2 представляет собой тип наблюдения (фактор)
  • Колонка 3 представляет собой индикатор группы

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

  • Некоторые из наблюдений старт/стоп пары (не вложенности, но и другие наблюдения могут быть внутри пар старт-стоп)
  • Метки времени, как правило, монотонно возрастает - за исключением того, что показатель четвёртую группа неявно обеспечивается упорядочением монотонно увеличивающихся кусков.

    В случае, когда не ясно, рассмотрим следующую последовательность меток времени:

    0 1 2 3 4 5 1 2 3 4 1 2 3 4 5 
         0 | 1 | 2 
    

    Это 3 порции, где первая порция все имеют второй показатель группы 0, вторая группа имеет индикатор 1 и т.д. .


Все становится немного легче, если я могу сделать что четвёртая индикатор явного; Это достаточно легко в python, но я надеялся сохранить все это в R.

прямая петля над данными будет достаточно легко, но я полагаю, там может быть быстрее, более R МОГ --- vector-- способ сделать это.

+1

Это может быть просто меня, но я не имею ни малейшего представления, что вы пытаетесь описать вообще. Возможно, вам понадобится предоставить небольшой набор данных примеров вместе с этим «4-м индикатором», который уже вычислен, потому что я не знаю, что это должно быть вообще. – joran

ответ

1

Попробуйте это:

tt <- c(0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 4, 5) 
grp <- cumsum(c(FALSE, diff(tt) < 0)) 

, который дает:

> grp 
[1] 0 0 0 0 0 0 1 1 1 1 2 2 2 2 2 
+0

Спасибо! Я ужасно не привык думать в векторах, но я знал, что должен быть лучший способ сделать это, чем цикл! –

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