【发布时间】:2018-04-09 10:25:01
【问题描述】:
我正在计算该值低于某个点的次数以及超过阈值以从开始计数的次数。
例如,如果我有
X <- c(1,2,11,14,5,6,7,12) 并且我正在计算值连续小于 10 的次数,然后我想要一个答案为
输出 = 2,3 由于 1,2 小于 10,所以总数为 2,然后重新开始计数 5,6,7,总数为 3
【问题讨论】:
我正在计算该值低于某个点的次数以及超过阈值以从开始计数的次数。
例如,如果我有
X <- c(1,2,11,14,5,6,7,12) 并且我正在计算值连续小于 10 的次数,然后我想要一个答案为
输出 = 2,3 由于 1,2 小于 10,所以总数为 2,然后重新开始计数 5,6,7,总数为 3
【问题讨论】:
你可以使用rle函数:
with(rle(X < 10),lengths[values])
> [1] 2 3
简要说明:
1) X < 10 返回:c(TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE) 所以我们只需要计算连续 TRUE 的批次
2) rle(X < 10) 正是这样做的,它返回一个对象(具有lengths 和values 属性的列表),指示连续批次的值及其长度。在这种情况下:
Run Length Encoding
lengths: int [1:4] 2 2 3 1
values : logi [1:4] TRUE FALSE TRUE FALSE
3) 这样做RLE <- rle(X < 10); RLE$lengths[RLE$values] 我们得到了你想要的,但是创建了一个无用的临时变量RLE(实际上没什么大不了的),但是使用with 我们只是跳过了那一段。
【讨论】: