如何计算一个条件在r中平均不成立之前成立的次数?

如何计算一个条件在r中平均不成立之前成立的次数?,r,R,我试图梳理股票数据,我通常使用Java,但对于最终构建的内容来说还不够好。在R中,我如何检查一个条件在平均为假之前是真的多少次 所以如果X>10=true 如果x10,直到其下方我最近才开始使用R,如果我正确理解了你的问题,我会遇到类似的问题 首先,我生成了1000个元素的样本,随机值在0到20之间。我选择20是因为你的条件是10,因此我选择10作为中间点 library(dplyr) x <- data.frame(n=runif(1000, min = 0, max = 20), gr

我试图梳理股票数据,我通常使用Java,但对于最终构建的内容来说还不够好。在R中,我如何检查一个条件在平均为假之前是真的多少次 所以如果X>10=true 如果x<10=假


有多少次是x>10,直到其下方

我最近才开始使用R,如果我正确理解了你的问题,我会遇到类似的问题

首先,我生成了1000个元素的样本,随机值在0到20之间。我选择20是因为你的条件是10,因此我选择10作为中间点

library(dplyr)
x <- data.frame(n=runif(1000, min = 0, max = 20), group = 0)
> x
#               n group
#1    18.01267749     0
#2     8.50561210     0
#3    11.26424876     0
#4     1.22902009     0
#5    17.37173610     0
#6    15.79453081     0
#7     4.84231228     0
#8     1.36992180     0
#9     2.16605579     0
#10   16.51773243     0
...
rle所做的是在条件结果发生变化时生成一个新的组索引。因此,如果一行中有3个值都小于10,它们都将具有相同的组索引,但一旦一个值不再满足条件,组索引就会增加

您可以在示例中注意到,行5-6都大于10,并且它们的组有索引5,但行7是maxx$group/2 [1] 242 您可以通过执行以下操作进行测试:

runLength我使用runif-like@Gabryxx7生成数据,但是这个解决方案是一个单行程序,我想这就是您一直在寻找的

# Data
set.seed(123)
x <- data.frame(n=runif(1000, min = 0, max = 20))

# Solution
mean(rle(x$n > 10)$lengths[rle(x$n > 10)$values == T])
[1] 2.020492
尝试sumx>10,但不清楚预期的输出。最好提供一个小的例子,或者可能是匹配的,x<10-1?很难说清楚你的意思,尤其是平均来说是假的。分享一些示例数据和您想要的结果。
# Create column in x for whether value is greater than 10
x$GreaterThanTen <- x$n > 10

# Input rle output into object
ConsecutiveVars <- rle(x$GreaterThanTen)

ConsecutiveVars$lengths # (1 1 1 2 1) Tells us some value occurs consecutively: once, once, once, twice, once, etc.
ConsecutiveVars$values # (F T F T F) Tells us which values occur consecutively: FALSE then TRUE then FALSE then TRUE then FALSE, etc.

# so FALSE occurs once, then TRUE occurs once, then FALSE occurs once, then TRUE occurs twice, then FALSE occurs once, etc.

# We want to know only how many times TRUE occurs consecutively, so we filter ConsecutiveVars$lengths for when it is TRUE
ConsecutiveTRUES <- ConsecutiveVars$lengths[ConsecutiveVars$values == T]

# Then take the average
mean(ConsecutiveTRUES)
2.020492