Вот возможное решение tidyverse
:
library(purrr)
library(plyr)
library(dplyr)
map2
используется для отображения значений двух векторов (начало и остановка).Затем мы делаем из них один вектор, затем unlist
вводим и объединяем наши результаты в data.frame
объект.
EDIT : С обновленным условием мы можем сделать что-то вроде:
start1= c(118,220, 255)
stop1 =c(115,210,260)
res<-purrr::map2(start1[1:length(stop1)],stop1,function(x,y) c(x,y[y>x]))
res[unlist(lapply(res,function(x) length(x)>1))]
# [[1]]
# [1] 255 260
ORIGINAL :
plyr::ldply(purrr::map2(start[1:length(stop)],stop,function(x,y) c(x,y)),unlist) %>%
setNames(nm=c("start","stop")) %>%
mutate(newCol=paste0("(",start,",",stop,")"))
# start stop newCol
#1 1 4 (1,4)
#2 5 13 (5,13)
#3 15 20 (15,20)
#4 NA 30 (NA,30)
#5 NA 40 (NA,40)
#6 NA 50 (NA,50)
Альтернатива: @Marius показывает хитрый способ. Ключ должен иметь соответствующую длину.
plyr::ldply(purrr::map2(start,stop[1:length(start)],function(x,y) c(x,y)),unlist) %>%
setNames(nm=c("start","stop")) %>%
mutate(newCol=paste0("(",start,",",stop,")"))
start stop newCol
1 1 4 (1,4)
2 5 13 (5,13)
3 15 20 (15,20)