代码之家  ›  专栏  ›  技术社区  ›  Catherine Pfeifer

在r中的apply函数中使用kmeans

  •  0
  • Catherine Pfeifer  · 技术社区  · 7 年前

    我今天面临着新的挑战!我想分别在我的表的每一行上执行kmeans(在我的情况下,这代表每月的天气数据),为每个点和每个月获得一个带有集群编号的表。

    插图

    这是数据的摘录(我总共有1700个观察结果,这里只有10个)

    data<-c( 
     245,      84 ,     99 ,  161,   249, 190 , 136 , 122 ,   157,       128  ,   123 ,     138 ,     106,
     246,      84 ,    101,   163 ,  257, 194 , 138 , 126 ,   163,       134  ,   127 ,     142 ,     108,
     247,     60  ,    80  , 131,   191, 156 ,  90  , 82  ,  106 ,       85  ,    86 ,     106  ,     88,
     248,      60 ,     80  , 131 ,  191, 156,   90 ,  82,    106 ,       85 ,     86 ,     106  ,     88,
     249 ,     60 ,     80 ,  131,   191, 156,   90,   82,    106 ,       85 ,     86 ,     106  ,     88,
     250 ,     58 ,     79 ,  131,   197, 156,   90,   78,    101 ,       84 ,     84 ,     106  ,     88,
     251 ,     60 ,     81 ,  135,   210, 163,   91,   82,    107 ,       88 ,     89 ,     108  ,     89,
     252 ,     67 ,     86 ,  140,   214, 168,  105,   92,    121 ,       99 ,     99 ,     114 ,      93,
     253,      70 ,     89 ,  144,   225, 171 , 110,   97,    128 ,      105 ,    104 ,     118 ,      94,
     254,      70 ,     89 ,  144,   225, 171,  110,   97,    128 ,      105 ,    104 ,     118 ,      94,
     255,      62 ,     82,   134,   205, 163 ,  94,   85,    110 ,       88 ,     90,      109,       89)
    data<-matrix(data, nrow=10,ncol=13,byrow=FALSE) 
    data<-data.frame(data)
    names(data)<-c('ID' ,'January' ,'Febuary', 'March', 'April', 'May' ,'June' ,'July' ,'August' ,'September' ,'October', 'November', 'December')
    

    在每条观测线上执行kmeans分类

    如您所见,我使用2个集群

    kmean<-apply(data[,2:13], 1,  function(x) {kmeans(x, 2)})
    

    很好,这样做很有效,并用kmeans报告创建了一个列表(也是列表,第二个是集群号)

    我可以查看特定行的群集编号,比如像这样的第2行

    kmean[[2]]$cluster
    

    挑战

    现在,我想得到一个表,它为我的数据帧中的每个观察结果提供kmean$cluster的结果。

    因此,我尝试了以下方法:

    cluster<-apply(kmean, 1, function (y) {kmean[[y]]$cluster})
    

    但是我得到了以下错误: 应用时出错(kmean,1,函数(y){: 尺寸(X)必须具有正长度

    有什么建议可以让我的表格显示每条线和每个月的观察结果属于哪个集群吗?

    非常感谢您看这个!凯瑟琳

    1 回复  |  直到 7 年前
        1
  •  1
  •   r.user.05apr    7 年前
    do.call(rbind, lapply(1:length(kmean), function(x) kmean[[x]]$cluster))