创建一个列表,其中每个元素都是来自给定向量的一对连续成员

时间:2017-10-17 12:13:43

标签: r split

或者如何将一个矢量分成几对连续成员并将它们组合在一个列表中?

让你得到载体

map <-seq(from = 1, to = 20, by = 4)

1  5  9  13  17

我的目标是创建以下列表

path <- list(c(1,5), c(5,9), c(9,13), c(13,17))

这应该代表地图吸引我们遵循的几个路径段。为了从1到17,我们必须先取第一条路径(path[1]),然后是第二条路径(path[2]),一直到最后。

我的第一次尝试引导我:

path <- split(aux <- data.frame(S = map[-length(map)], E = map[-1]), row(aux))

但我认为没有创建这个辅助数据框就有可能 当初始向量(map)变大时,避免性能下降。此外,它返回一条非常好的警告信息,但我想避免它们。

然后我在stackoverflow上找到了这个(不完全像这样,这是我的问题的改编版本):

mod_map <- c(map, map[c(-1,-length(map))])
mod_map <- sort(mod_map)
split(mod_map, ceiling(seq_along(mod_map)/2))

这是一个更简单的解决方案,但我必须使用map的此修改版本。

因为我已经有了两个解决方案,所以我问得太多了。但是,有没有可能有第三个,所以我没有像我的第一个解决方案那样使用数据框,并且可以使用原始地图,这与我的第二个解决方案不同?

1 个答案:

答案 0 :(得分:2)

我们可以在向量上使用Map('map' - 最好不要使用函数名 - 它是来自purrr的函数),删除第一个和最后一个元素并按元素连接

Map(c, map[-length(map)], map[-1])

或者@Sotos提到,split可以使用更快

split(cbind(map[-length(map)], map[-1]), seq(length(map)-1))