r - 如何计算一个条件为真的次数,直到它在 r 中平均不为真?
问题描述
我正在尝试梳理股票数据,我通常使用 Java,但对于我最终构建的内容来说还不够好。在 R 中,我如何检查一个条件平均有多少次为真,直到其为假,所以 if X> 10 = true if x < 10 = false
x > 10 多少次直到它低于
解决方案
我最近才开始使用 R 并且(如果我正确理解了您的问题)我遇到了类似的问题。
首先,我生成一个包含 0 到 20 之间随机值的 1000 个元素的样本(我选择 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
...
我不确定你的具体意思是什么,但我会尝试解决两个问题:1-计算有多少行满足某个条件,有多少行不满足。2-检查有多少连续“行”满足某个条件,直到不再满足该条件。
现在对于第一种情况,使用 for 循环以“编程”方式思考:
res2 <- c(0,0)
for(i in 1:nrow(x)){
if(x[[i,"n"]] > 10)
res2[1] <- res2[1]+1
else
res2[2] <- res2[2]+1
}
#> res2
#[1] 494 506
当然还有一种更好更快的方法,“R”方式:
res <- x %>%
group_by(group = if_else(x$n > 10, 1, 0)) %>%
summarise(total = n())
# A tibble: 2 x 2
# group total
# <dbl> <int>
#1 0 506
#2 1 494
思路很简单:将所有值 >10 的行放在一个组中(用 1 标识,将n
<10 的行放在另一个用 0 标识的组中),然后用变量分组,group
最后统计两组的总行数.
现在是第二种情况,如果没有合适的工具,这会稍微困难一些。实际上,当时我花了一段时间才在不使用 for 循环的情况下找到正确的答案。
这个想法是使用rle或游程编码:
x$group <- with(rle(x$n < 10), rep(seq_along(lengths), lengths))
#> x
# n group
#1 18.01267749 1
#2 8.50561210 2
#3 11.26424876 3
#4 1.22902009 4
#5 17.37173610 5
#6 15.79453081 5
#7 4.84231228 6
#8 1.36992180 6
#9 2.16605579 6
#10 16.51773243 7
#11 2.22784827 8
#12 19.44676961 9
#13 1.28190206 10
#14 15.93426880 11
#15 16.70963107 11
#16 5.01572254 12
rle
只要条件结果发生变化,就会生成一个新的组索引。因此,如果一行中有 3 个值均 < 10,则它们都将具有相同的组索引,但是一旦某个值不再满足条件,组索引就会增加。
您可以在示例中注意到,第 5-6 行均 >10,并且它们的组具有索引5
,但第 7 行是 <10,因此新组索引为6
,依此类推...
现在,由于每次条件结果更改时组索引都会更改,因此为了知道它确实更改了多少次,您可以获取最大的组索引并除以 2。
> max(x$group)/2
# [1] 242
您可以通过以下方式进行测试:
runLength <- rle(x$n < 10)$values
res <- length(runLength[runLength == TRUE])
#> res
#[1] 242
推荐阅读
- statistics - 如何在SPSS中将变量从主数据集链接到详细数据集
- sql - 获取整列的内容
- java - java中的静态块如何工作?
- python - 如何编写一个返回插值的函数(熊猫数据框)?
- flutter - Flutter 中的神经拟态设计
- reactjs - 无法从@mui 缩小代码,而 npm run build
- python - 有没有办法改变 Celery + RabbitMQ 的队列消费顺序?
- swiftui - 从多个图层制作收藏按钮并使用 EnvironmentObject 绑定两个列表
- angular - 子文件夹路由问题中的 Angular 应用程序
- python - 如果我在 django 中有 JSON,如何进行 post call