我有一个二进制数的向量.我知道每组物体的连续长度; 如何基于该信息进行拆分(不使用for循环)?
x = c("1","0","1","0","0","0","0","0","1")
.length = c(group1 = 2,group2=4, group3=3)
Run Code Online (Sandbox Code Playgroud)
x是我需要拆分的二进制数向量..length是我得到的信息..length基本上告诉我第一组有2个元素,它们是前两个元素1,0.第二组包含4元素,并包含第1组数字后面的4个数字1,0,0,0,等等.
有没有办法拆分并将拆分的项目返回到列表?
丑陋的方式是通过for循环跟踪当前的cumsum,但我正在寻找一种更优雅的方式,如果有的话.
Ric*_*ven 11
您可以使用rep设置拆分变量,即使用split
x = c("1","0","1","0","0","0","0","0","1")
.length = c(group1 = 2,group2=4, group3=3)
split(x, rep.int(seq_along(.length), .length))
# $`1`
# [1] "1" "0"
#
# $`2`
# [1] "1" "0" "0" "0"
#
# $`3`
# [1] "0" "0" "1"
Run Code Online (Sandbox Code Playgroud)
如果要将组名称与拆分列表一起使用,则可以更改rep为复制名称
split(x, rep.int(names(.length), .length))
# $group1
# [1] "1" "0"
#
# $group2
# [1] "1" "0" "0" "0"
#
# $group3
# [1] "0" "0" "1"
Run Code Online (Sandbox Code Playgroud)