我正在使用大型数据集,我正在尝试首先识别满足特定阈值的值集群。那么我的目标是只保留最小长度的簇。以下是一些示例数据和我迄今为止的进展:
Test = c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")
Sequence = c(1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10)
Value = c(3,2,3,4,3,4,4,5,5,2,2,4,5,6,4,4,6,2,3,2)
Data <- data.frame(Test, Sequence, Value)
使用包evd,我已经识别出值> 3
的簇C1 <- clusters(Data$Value, u = 3, r = 1, cmax = F, plot = T)
哪个产生
C1
$cluster1
4
4
$cluster2
6 7 8 9
4 4 5 5
$cluster3
12 13 14 15 16 17
4 5 6 4 4 6
我的问题有两个: 1)我不知道如何将其与原始数据帧相关联(例如,测试A&amp; B) 2)我怎样才能保留最小为3的簇(因此不包括簇1)
我已经研究了各种过滤选项等,但是它们没有根据所需的阈值对数据进行聚类,也没有选择最小的群集大小。
非常感谢任何帮助。
答案 0 :(得分:0)
Q1:回归原始数据框:看看Carl Witthoft的回答。他写了一个rle()的变体(seqle()因为它允许人们寻找整数序列而不是重复):detect intervals of the consequent integer sequences
Q2:只保留一定长度的簇:
C1[sapply(C1, length) > 3]
产生足够长的2个簇:
$cluster2
6 7 8 9
4 4 5 5
$cluster3
12 13 14 15 16 17
4 5 6 4 4 6