gpt4 book ai didi

r - 帮助 rle 命令

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

我在使用 rle 命令时遇到了一些问题,该命令旨在找到参与者连续达到 8 个连续参与者的点。

例如,如果:

x <- c(0,1,0,1,1,1,1,1,1,1,1,1)

我想返回值 11。

感谢 DWin 让我一直在使用这段代码:

which( rle(x2)$values==1 & rle(x2)$lengths >= 8)
sum(rle(x)$lengths[ 1:(min(which(rle(x)$lengths >= 8))-1) ]) + 8

我一直在使用这段代码成功地处理我的数据。但是,我注意到它在处理我的一个数据文件时出错了。

例如,如果

 x <- c(1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)

代码返回 19,这是达到一行中八个连续零的点。我不确定出了什么问题或如何解决它。

预先感谢您的帮助。

最佳答案

您需要将第一行代码完整地粘贴到第二行:

sum(rle(x)$lengths[ 1:(min(which( rle(x2)$values==1 & rle(x2)$lengths >= 8))-1) ]) + 8
[1] 39

然而,这里有另一种方法,使用函数filter。这会在我认为更具可读性的代码中产生相同的结果:

which(filter(x2, rep(1/8, 8), sides=1) == 1)[1]
[1] 39

以这种方式使用时,filter 函数实质上是计算向量中包含 8 个值的 block 的移动平均值。然后,我返回移动平均值等于 1 的第一个值的位置。

关于r - 帮助 rle 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013531/

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