Подсчет последовательных значений в строках в R - PullRequest
0 голосов
/ 07 июня 2018

У меня есть временной ряд и фрейм данных панели с определенным идентификатором в первом столбце и еженедельным статусом занятости: Безработный (1), занятый (0).

У меня 261 переменная (число недель в году) и 1.000.000 наблюдений.

Я хотел бы подсчитать максимальное число последовательных повторений '1' для каждой строки в R.

Я немного посмотрел на rowSums и rle (), но меня интересует не только сумма строки, поскольку очень важно, чтобы значения были последовательными.

Вы можете увидеть пример структуры моего набора данных - просто представьте больше строк и столбцов

1 Ответ

0 голосов
/ 07 июня 2018

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

most_consecutive_val = function(x, val = 1) {
  with(rle(x), max(lengths[values == val]))
}

Тогдамы можем apply эту функцию для строк вашего фрейма данных, опуская первый столбец (и любые другие столбцы, которые не должны быть включены):

apply(your_data_frame[-1], MARGIN = 1, most_consecutive_val)

Если вы делитесь некоторыми легко импортируемымиПримеры данных, я буду рад помочь отладке в случае возникновения проблем.dput - это простой способ поделиться копируемым / вставляемым подмножеством данных, например, dput(your_data[1:5, 1:10]) будет отличным способом поделиться первыми 5 строками и 10 столбцами ваших данных.


ЕслиВы хотите избежать предупреждений и -Inf результатов в случае, когда нет 1, используйте предложение Райана из комментариев:

most_consecutive_val = function(x, val = 1) {
  with(rle(x), if(all(values != val)) 0 else max(lengths[values == val]))
}
...