【发布时间】:2019-01-28 21:50:44
【问题描述】:
根据条件将向量拆分为 n 个元素的最优雅方法是什么?
每个单独的真块都应该进入它自己的列表元素。所有虚假的元素都会被丢弃。
示例 1:
vec <- c(1:3,NA,NA,NA,4:6,NA,NA,NA,7:9,NA)
cond <- !is.na(vec)
result = list(1:3,4:6,7:9)
示例 2:
vec_2 <- c(3:1,11:13,6:4,14:16,9:7,20)
cond_2 <- vec_2 < 10
results_2 = list(3:1,6:4,9:7)
如果有一个向量vec 和相关条件cond 的通用解决方案,那就太好了。
我最好的尝试:
res <- split(vec,data.table::rleidv(cond))
odd <- as.logical(seq_along(res)%%2)
res[if(cond[1])odd else !odd]
【问题讨论】: