2017-10-17 39 views
3

或者如何将矢量拆分为连续成员对并将它们组合到列表中?创建一个列表,其中每个元素是来自给定矢量的一对连续成员

Supose您将得到矢量

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)是很大的。此外,它还会返回一个非常好的警告消息,但我想避免它们。

然后我发现这个在这里计算器(不完全是这样的,这是我的问题的改编版):

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

这是一个简单的解决方案,但我不得不使用这个修改后的版本我map

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

回答

2

我们可以在矢量使用Map(“地图” - 最好不要使用函数名 - 这是从purrr函数)与第1和最后一个元素取出并连接的elementwise

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

或者如@Sotos提到的,split可使用会更快

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

或者,可以通过'分裂避免'Map'(cbind(地图[-length(地图)],地图[-1]),SEQ( lengt H(地图)-1))' – Sotos

相关问题