在 r 中的应用函数中使用 kmeans

using kmeans within an apply function in r

我今天面临新的挑战!我想分别在我的 table 的每一行上执行 kmeans(在我的例子中,这代表每月的天气数据)得到每个点和月份的 table 以及簇号。

插图

这里是数据的摘录(我总共有大约 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

挑战

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

所以我尝试了以下方法:

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

但随后出现以下错误: 应用错误(kmean, 1, function(y) { : dim(X) 必须具有正长度

有什么建议可以让我的 table 显示每行和每个月观察结果属于哪个集群?

非常感谢您看到这里!凯瑟琳

do.call(rbind, lapply(1:length(kmean), function(x) kmean[[x]]$cluster))