R data.table和k表示聚类

时间:2013-08-27 03:43:58

标签: r data.table k-means

我甚至不确定data.table是否可行。我有一个如下所示的数据集。它是一个数据框,但我后来转换为data.table,称为x

id xcord ycord
a  2 3
a  3 4
a  3 3
a  9 10
a  8 9
b  1 3
b  1 2
b  8 19
b  7 21

我想识别每个id两个集群,这证明是困难的。我尝试了以下

x = x[,list(x1 = kmeans(xcord,centers=2)$centers, y1 = kmeans(ycord,centers=2)$centers,by = id]

但它给出了以下错误消息。 All items in j=list(...) should be atomic vectors or lists. If you are trying something like j=list(.SD,newcol=mean(colA)) then use := by group instead (much quicker), or cbind or merge afterwards. Calls: [ -> [.data.table Execution halted

我期待一个数据表,其条目可以“处理”为中心列表。这甚至可能吗?

1 个答案:

答案 0 :(得分:4)

centers元素是一个矩阵(它将包含与x kmeans参数中的列一样多的列。

如果要在同一群集中找到考虑xcordycord的群集,则需要将矩阵传递给kmeans。然后,您将不得不强制回到data.table。这将使名字明智。

# eg.
fx <- x[,data.table(kmeans(cbind(xcord,ycord),centers=2)$centers),by=id]
fx
#    id    xcord     ycord
# 1:  a 2.666667  3.333333
# 2:  a 8.500000  9.500000
# 3:  b 7.500000 20.000000
# 4:  b 1.000000  2.500000