我试图在R中找到一个包,在这里我可以在数据集中找到超过给定阈值的集群。
我想知道的是集群的持续时间/大小以及每个集群的单个值。
例如(一个简单的):
我有一个数据向量,
10 8 6 14 14 14 5 11 12 11 16 20 6 8 8 6 15
大于9的集群是用粗体定义的,
10 8 6 14 14 7 14 5 11 12 8 11 16 20e 2116 8 8 6E 11215E 213
所以在这里,按顺序排列的集群大小是,
1,2,1,2,4,1
我想要R做的是以不同的有序向量返回簇。
[1] 10
[2] 14 14
[3] 14
[4] 11 12
[5] 11 11 16 20
[6] 15例如,是否有这样的包或带有if语句的一段代码也会有所帮助。
干杯
发布于 2020-05-25 17:27:26
data.table::rleid函数在这方面运行良好:
Filter(function(a) a[1] > 9, split(vec, data.table::rleid(vec > 9)))
# $`1`
# [1] 10
# $`3`
# [1] 14 14
# $`5`
# [1] 14
# $`7`
# [1] 11 12
# $`9`
# [1] 11 11 16 20
# $`11`
# [1] 15如果您不想仅仅为此加载data.table包,那么https://stackoverflow.com/a/33509966的基本-R方法
myrleid <- function(x) {
rl <- rle(x)$lengths
rep(seq_along(rl), times = rl)
}
Filter(function(a) a[1] > 9, split(vec, myrleid(vec > 9)))https://stackoverflow.com/questions/62007395
复制相似问题