r - 如何根据 r 中另一个向量的值将向量列表拆分为子列表
问题描述
假设我有一个向量列表,x
如下所示:
> x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6), x4=c(4,8,4), x5=c(4,33,4), x6=c(9,6,7))
假设我还有另外两个向量y
,y1
例如:
y <- c(3,3)
y1 <- c(2,4)
我想x
根据 和 的值y
进行拆分y1
。例如,对于y
,我想x
分成两个具有相同向量数量的子列表(每个子列表中有 3 个向量)
对于y1
,我想x
分成两个具有不同向量数量的子列表,其中第一个子列表包含 2 个向量,第二个子列表包含 4 个向量。
我试过这个:
> z <- split(x, y[1]))
但这不是我所期望的。
输出应如下所示:
基于y
:
sublist_1 = list(x1, x2, x3),
sublist_2= list(x4,x5,x6)
基于y1
:
sublist_1 = list(x1, x2).
sublist_2= list(x1, x2, x3, x4).
请问有什么帮助吗?
解决方案
我们可以split
通过创建要拆分的组来将列表拆分为元素。
split(x, rep(c(1, 2), y))
#$`1`
#$`1`$x1
#[1] 1 2 3
#$`1`$x2
#[1] 1 4 3
#$`1`$x3
#[1] 3 4 6
#$`2`
#$`2`$x4
#[1] 4 8 4
#$`2`$x5
#[1] 4 33 4
#$`2`$x6
#[1] 9 6 7
我们也可以写一个函数来做到这一点
split_list <- function(x, split_var) {
split(x, rep(1:length(split_var), split_var))
}
split_list(x, y1)
#$`1`
#$`1`$x1
#[1] 1 2 3
#$`1`$x2
#[1] 1 4 3
#$`2`
#$`2`$x3
#[1] 3 4 6
#$`2`$x4
#[1] 4 8 4
#$`2`$x5
#[1] 4 33 4
#$`2`$x6
#[1] 9 6 7
推荐阅读
- database - 如何使用 AWS 数据库删除保护删除数据库
- mongodb - 日志文件包括字段:“lsid”
- git - 使用bfg的参数是什么
- python - 在 FOR 循环中使用字典键指定列表
- python - 计算python中单词的频率
- javascript - 为什么使用 react-redux 时 props 未定义?
- javascript - 在数组中查找对象?
- android - 视图绑定不适用于“包含”:不兼容的类型:ProgressBarLayoutBinding 无法转换为 ViewDataBinding
- r - Rstudio 谷歌分析 API
- angular - 如何使 ng new 命令不需要互联网来创建 angular2 项目?