R语言统计向量从末尾到首个a之间r元素的出现次数与位置
实现思路
- 第一步:提取向量中所有值为
a的位置,若向量不存在a,则遍历范围覆盖整个向量 - 第二步:取所有
a位置的最大值,也就是最靠近向量末尾的a的位置,我们只需要检查该位置之后到向量末尾的所有元素即可 - 第三步:在上述确定的范围内,筛选出所有值为
r的原向量索引,按从大到小排序(对应从末尾倒序遍历的顺序) - 第四步:返回结果的第一个元素为符合条件的
r的总数量,后续依次为排序后的索引
代码实现
some.function <- function(V) { # 定位所有值为a的元素位置 a_pos <- which(V == "a") # 确定需要检查的元素起始位置 if (length(a_pos) == 0) { check_start <- 1 } else { check_start <- max(a_pos) + 1 } vec_len <- length(V) # 没有需要检查的元素直接返回0 if (check_start > vec_len) { return(0) } # 筛选范围内r的位置,倒序排列 r_pos <- sort(which(V[check_start:vec_len] == "r") + check_start - 1, decreasing = TRUE) # 拼接结果:数量 + 位置索引 return(c(length(r_pos), r_pos)) }
测试验证
# 测试用例1 > some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 'a', 0, 'a', 'r' , 0, 'r')) [1] 2 13 11 # 测试用例2 > some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 'a', 0, 'a', 'r')) [1] 1 11 # 测试用例3 > some.function(c('a', 0, 'a', 'r', 'r', 0, 'r')) [1] 3 7 5 4 # 测试用例4 > some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 0)) [1] 3 7 5 4
内容的提问来源于stack exchange,提问作者DR15
相关产品推荐
相关产品推荐

