我在R中有一组数字矢量,每个长度为16。我想选择所有值都出现在四个位置之一的那些矢量:1:4、5:8、9:12、13:16
例如向量c(NA, 1, NA, 1, 1, 1, 1, 1, NA, NA, 1, NA, NA, 1, NA, 1, NA)
将通过测试,因为位置5:8均为非NA。
什么是最优雅的方法(即使用最少的易于阅读的代码)来测试?
使用索引列表,您可以遍历这些范围并查找没有任何索引的范围NA
:
vec <- c(NA, 1, NA, 1, 1, 1, 1, 1, NA, NA, 1, NA, NA, 1, NA, 1, NA)
sapply(list(1:4, 5:8, 9:12, 13:16),
function(ind) !anyNA(vec[ind]))
# [1] FALSE TRUE FALSE FALSE
如果要返回这些索引中的值:
inds <- list(1:4, 5:8, 9:12, 13:16)
good <- sapply(inds, function(ind) !anyNA(vec[ind]))
# should check that `any(good)` is true
inds[[ which(good)[1] ]]
# [1] 5 6 7 8
vec[ inds[[ which(good)[1] ]] ]
# [1] 1 1 1 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句