gpt4 book ai didi

r - 识别列表中的 TRUE block

转载 作者:行者123 更新时间:2023-12-04 09:18:13 24 4
gpt4 key购买 nike

我正在做一些分析的东西并使用 R。我遇到了一个问题:

我有一个逻辑列表,如下所示:

list = (TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE)

对于每个逻辑值 a 都有一个数值列表:
num = (1, 4, 3, 7, 3, 2 , 23, 98, 5)

我想对 的值求和块 TRUEs 并将它们放入矩阵或 sth 中。

就这样:
list[1] == TRUE and list[2] == TRUE and list[3] == TRUE所以我在计算总和:1+4+3 = 8
所以 matrix[1,1] <- 8然后省略 list[4] 和 list[5] 因为它是 FALSE 并转到 list[6], matrix[2,1] <- 2 ... 等等...

我不知道如何提取那些 TRUE 块。我希望你能以某种方式帮助我!

最佳答案

您可以使用 rle并执行以下操作:

myL = c(TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE)
num = c(1, 4, 3, 7, 3, 2 , 23, 98, 5)
X <- rle(myL)
Y <- rep(seq_along(X$lengths)[X$values], X$lengths[X$values])
tapply(num[myL], Y, sum)
1 3 5
8 2 103

这里,第一组 TRUE s 总和为 8,第二组(一个值)为 2,第三组(98 和 5)总和为 103。

或者,安装 my "SOfun" package from GitHub ,它有一个名为 TrueSeq 的函数这将对此有用。

安装它:
library(devtools)
install_github("mrdwab/SOfun")

该函数执行以下操作:
TrueSeq(myL)
# [1] 1 1 1 0 0 2 0 3 3

这使您可以简单地执行以下操作:
tapply(num, TrueSeq(myL), sum)
# 0 1 2 3
# 33 8 2 103

或者,更好的是,使用 zero2NA参数在 TrueSeq , 像这样:
tapply(num, TrueSeq(myL, zero2NA=TRUE), sum)
# 1 2 3
# 8 2 103

关于r - 识别列表中的 TRUE block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692581/

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