Мы можем написать небольшую вспомогательную функцию, которая будет возвращать максимальное количество раз, которое определенное значение последовательно повторяется в векторе, с хорошим значением по умолчанию 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]))
}