gpt4 book ai didi

r - 计算字符数量及其位置,直到达到某个值

转载 作者:行者123 更新时间:2023-12-04 02:25:25 26 4
gpt4 key购买 nike

我需要从最后一个值开始计算 r 出现的次数。元素出现在我的向量中,直到达到 a元素。例如,假设我有一个向量 V = c('a', 0, 'a', 'r', 'r', 0, 'r', 'a', 0, 'a', 'r' , 0, 'r') 。请注意,在本例中,元素 r 出现的次数出现直到出现 a是2倍。因此,除了显示它们出现的位置(即位置 13)之外,我还需要 a 将数字 2 返回给我。和11 。类似的东西

> some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 'a', 0, 'a', 'r' , 0, 'r'))
[1] 2
[2] 13
[3] 11

> some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 'a', 0, 'a', 'r'))
[1] 1
[2] 11

> some.function(c('a', 0, 'a', 'r', 'r', 0, 'r'))
[1] 3
[2] 7
[3] 5
[4] 4

> some.function(c('a', 0, 'a', 'r', 'r', 0, 'r', 0))
[1] 3
[2] 7
[3] 5
[4] 4

关于如何做到这一点有任何提示吗?

最佳答案

这是一个选项(基于所示的示例)

  1. 使用分组操作 - tapply
  2. 根据逻辑向量 (x == 'a') 使用 rleid 创建组
  3. 将输入向量序列 (seq_along(x)) 与 d 乘以逻辑向量 ( x == 'r'),这样我们就得到与 'r' 对应的位置,而其他位置,即 FALSE 将为 0。
  4. 指定 FUN 中的 lambda 函数对非 0 的元素进行子集
  5. 上述步骤 4 返回一些 length 0 的 list 元素,因为这些元素只有 0 个值,而我们进行子集化
  6. 使用Filter删除那些空的list元素
  7. 使用tail获取last元素,并指定n = 1
  8. 附加提取元素的长度并将其作为函数输出返回
f1 <- function(x) {

out <- tail(Filter(length, tapply(seq_along(x) * (x == 'r'),
data.table::rleid(x == 'a'), FUN = function(y) y[y != 0])), 1)[[1]]
c(length(out), out)

}

-测试

lapply(lst1, f1)
[[1]]
[1] 2 11 13

[[2]]
[1] 1 11

[[3]]
[1] 3 4 5 7

注意:仅出于测试目的,向量被创建为列表。也可以在单个向量上执行此操作

f1(lst1[[1]])

数据

lst1 <- list(c("a", "0", "a", "r", "r", "0", "r", "a", "0", "a", "r", 
"0", "r"), c("a", "0", "a", "r", "r", "0", "r", "a", "0", "a",
"r"), c("a", "0", "a", "r", "r", "0", "r"))

关于r - 计算字符数量及其位置,直到达到某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68041904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com