Ввод:
qa <- data.frame(A_1 = c(1,1,1,1,1,0,0,0,1,1),
A_2 = c(1,1,0,1,1,0,0,1,1,1),
B_1 = rep(1,10),
B_2 = c(1,1,0,0,1,1,1,0,0,1),
C_1 = c(rep(1,7),0,0,0),
C_2 = c(1,1,1,1,0,1,1,0,0,1))
rle
дает кодирование длины серии, поэтому мы можем использовать его для извлечения первого непрерывного отрезка серий.
База R
sapply(qa, function(x) with (rle(x), lengths[values == 1][1]))
вывод:
A_1 A_2 B_1 B_2 C_1 C_2
5 2 10 2 7 4
или, если вы предпочитаете tidyverse
пакет:
library(tidyverse)
map_dfr(qa, ~rle(.)$lengths[rle(.)$values==1][1])
вывод:
# A tibble: 1 x 6
A_1 A_2 B_1 B_2 C_1 C_2
<int> <int> <int> <int> <int> <int>
1 5 2 10 2 7 4
или если вы хотитеdata.frame вместо tibble вы можете преобразовать его:
>as.data.frame(map_dfr(qa, ~rle(.)$lengths[rle(.)$values==1][1]))
A_1 A_2 B_1 B_2 C_1 C_2
1 5 2 10 2 7 4