R: Извлечь элементы из вектора, заданного положения начала / остановки - PullRequest
3 голосов
/ 20 апреля 2020

Есть ли простой способ извлечь элементы из вектора в R, если я знаю индексы начала / конца для каждого извлечения? Например, у меня есть:

v <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t")
start <- c(1, 4, 11, 15)
end <- c(2, 7, 11, 19)

Результат должен быть: c("a", "b", "d", "e", "f", "g", "k", "o", "p", "q", "r", "s")

Ответы [ 4 ]

3 голосов
/ 20 апреля 2020

Может быть, вы можете попробовать

unlist(Map(function(x,y) v[x:y], start,end))

или

v[!!findInterval(seq_along(v),sort(c(start,end+1)))%%2]
3 голосов
/ 20 апреля 2020

Один из вариантов может быть:

v[unlist(Map(`:`, start, end))]

 [1] "a" "b" "d" "e" "f" "g" "k" "o" "p" "q" "r" "s"
1 голос
/ 20 апреля 2020

Мы можем использовать map2

library(purrr)
library(dplyr)
map2(start, end, ~ v[.x:.y]) %>%
       flatten_chr
#[1] "a" "b" "d" "e" "f" "g" "k" "o" "p" "q" "r" "s"
1 голос
/ 20 апреля 2020

другой вариант

unlist(sapply(1:4, function(x) v[start[x]:end[x]]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...