4

假设我有一个向量中的数字列表。我正在尝试提出一个脚本,它将列表划分或排序为(不一定是偶数)集合,这些集合的数字相对于向量中的其他数字彼此相当接近。您可以假设向量中的数字按升序排列。

my_list<- c(795, 798, 1190, 1191, 2587, 2693, 2796, 3483, 3668)

也就是说,我需要帮助想出一个脚本,将这些数字划分并分配到集合中

set_1<- c(795, 798) # these 2 numbers are fairly close to each other
set_2<- c(1190, 1191) # these numbers would be another set
set_3<- c(2587, 2693, 2796) # these numbers would be another set relative to the other numbers
set_4<- c(3483, 3668)  # the last set

非常感谢任何帮助或建议。

4

2 回答 2

5

一般来说,您所要求的称为聚类分析,其中有许多可能的方法和算法,其中许多已经在此处列出的 R 包中可用:http: //cran.r-project.org/web/views /Cluster.html

例如,您可以使用层次聚类对数据进行聚类。

tree <- hclust(dist(my_list))
groups <- cutree(tree, h = 300)
# [1] 1 1 2 2 3 3 3 4 4
split(my_list, groups)
# $`1`
# [1] 795 798
# 
# $`2`
# [1] 1190 1191
# 
# $`3`
# [1] 2587 2693 2796
# 
# $`4`
# [1] 3483 3668
于 2012-11-25T01:00:15.647 回答
3

弗洛德尔的回答要好得多,因为我对聚类分析有足够的了解,可以装满一个小顶针,而且还有空间放 2 颗豌豆,但这是基本的回应:

split(my_list, cut(my_list, breaks=seq(0, 4000, by=1000)))
于 2012-11-25T01:02:23.597 回答