【问题标题】:using kmeans within an apply function in r在 r 中的应用函数中使用 kmeans
【发布时间】:2018-08-21 08:30:19
【问题描述】:

我今天面临新的挑战!我想分别在我的表格的每一行上执行一个 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, function(y) { : dim(X) 的长度必须为正

有什么建议可以让我的表格显示每行和每个月观察所属的集群吗?

非常感谢您查看此内容!凯瑟琳

【问题讨论】:

    标签: r list apply k-means


    【解决方案1】:
    do.call(rbind, lapply(1:length(kmean), function(x) kmean[[x]]$cluster))
    

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多