在 R 中找到正确的包以进行聚类分析
Finding the right package in R for cluster analysis
我试图在 R 中找到一个包,我可以在其中找到超过数据集中给定阈值的集群。
我想知道的是集群 duration/size 和每个集群的单独值。
例如(简单的一个):
我有一个数据向量,
10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15
大于9的簇以粗体定义,
10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15
所以这里的簇大小按顺序是,
1, 2, 1, 2, 4, 1
我想让 R 做的是 return 单独有序向量中的簇,例如
[1] 10
[2] 14 14
[3] 14
[4] 11 12
[5] 11 11 16 20
[6] 15
是否有这样的包或一段带有 if 语句的代码也有帮助。
干杯
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
包,那么 :
中的 base-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)))
我试图在 R 中找到一个包,我可以在其中找到超过数据集中给定阈值的集群。
我想知道的是集群 duration/size 和每个集群的单独值。
例如(简单的一个):
我有一个数据向量,
10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15
大于9的簇以粗体定义,
10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15
所以这里的簇大小按顺序是,
1, 2, 1, 2, 4, 1
我想让 R 做的是 return 单独有序向量中的簇,例如
[1] 10
[2] 14 14
[3] 14
[4] 11 12
[5] 11 11 16 20
[6] 15
是否有这样的包或一段带有 if 语句的代码也有帮助。
干杯
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
包,那么
myrleid <- function(x) {
rl <- rle(x)$lengths
rep(seq_along(rl), times = rl)
}
Filter(function(a) a[1] > 9, split(vec, myrleid(vec > 9)))