Мы создаем группу на основе вхождения ;
, а затем получаем первый элемент 'v1' в качестве нового столбца
library(dplyr)
df1 %>%
group_by(grp = cumsum(grepl(";", v1))) %>%
mutate(new = as.numeric(sub(";", "", first(v1)))) %>%
filter(!grepl(";", v1)) %>%
ungroup %>%
select(-grp)
# A tibble: 9 x 2
# v1 new
# <chr> <dbl>
#1 12345 10
#2 67890 10
#3 11121314 10
#4 85642 10
#5 19654 10
#6 5642 11
#7 9987 11
#8 22365 11
#9 5589 13
data
df1 <- data.frame(v1 = c('10;', 12345, 67890, 11121314, 85642, 19654,
'11;', 5642, 9987, 22365, '13;', 5589), stringsAsFactors = FALSE)