Я отредактировал его после обсуждения с @Mate (см. Комментарии к этому ответу):
Решение:
library(tidyverse)
dat %>%
rownames_to_column("n") %>%
mutate(n = as.integer(n)) %>%
gather(key = "time", value = "observation", -n) %>%
group_by(n) %>%
filter(observation == "2") %>%
summarize(
interval = paste(time[seq(1, n(), 2)],
c(time, "...")[seq(2, n() + n() %% 2, 2)],
sep = "-",
collapse = ", ")
) %>%
ungroup() %>%
arrange(n) %>%
write_csv("my_results.csv")
Вывод
# A tibble: 100 x 2
n interval
<int> <chr>
1 1 04:30-14:00, 19:30-20:15, 22:30-01:15, 03:45-...
2 2 06:15-08:00, 09:00-12:00, 13:45-16:30, 18:45-23:15, 00:30-02:15
3 3 06:00-06:30, 08:00-09:45, 11:15-13:30, 14:15-23:15, 01:00-01:30
4 4 20:00-21:15, 23:30-03:15
5 5 05:00-09:30, 10:00-10:30, 11:45-12:00, 13:15-13:30, 14:00-20:15, 20:30-21:3~
6 6 07:45-08:30, 09:15-13:15, 19:15-19:30, 20:30-20:45, 21:00-21:45, 01:45-...
7 7 09:30-17:45, 21:15-...
8 8 07:00-09:30, 12:45-18:00, 19:00-21:15, 00:15-02:00
9 9 05:45-06:15, 09:00-16:00, 17:15-19:45, 21:15-22:30, 23:00-...
10 10 10:00-10:15, 12:15-13:30, 16:15-16:45, 21:30-23:45, 00:45-01:30
Данные
colnms <- paste(
str_pad(rep(c(4:23, 0:3), each = 4), 2, "left", 0),
str_pad(rep(c(0, 15, 30, 45), times = 24), 2, "left", 0),
sep = ":"
)
set.seed(53248604)
dat <- matrix(sample(c("-", 2), 9600, prob = c(0.9, 0.1), replace = T), nrow = 100)
dimnames(dat) <- list(1:100, colnms)
dat <- as.data.frame(dat)