【问题标题】:R data.table and kmeans clusteringR data.table 和 kmeans 聚类
【发布时间】:2013-08-27 11:54:02
【问题描述】:

我什至不确定这是否可以使用 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

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

【问题讨论】:

    标签: r data.table k-means


    【解决方案1】:

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

    如果您想在同一聚类集中查找考虑到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
    

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 2012-04-02
      • 2017-04-10
      • 2013-07-06
      • 2011-07-02
      • 2012-04-21
      • 2013-11-18
      • 1970-01-01
      • 2015-04-18
      相关资源
      最近更新 更多