【发布时间】:2021-07-18 15:11:49
【问题描述】:
我有一个希望在其上进行 kmeans 聚类的数据集。
基本上有很多 ReEDSregion,在每个 ReEDSregion 内有很多类(ReEDSregion 1,class 1;ReEDSregion 1,class 2;ReEDSregion 2,class 1,等等)。
我想对每个 ReEDSregion 和类组合(按 ReEDSregion 和类)的变量“grid_cost”进行 10 个集群的 kmeans 聚类。
一些 ReEDSregion 和类组合的观测值少于 10 个,因此集群的数量与观测值的数量一样多。我首先为此创建了一个函数:
make_bins <- function (dtbl, nbins) {
# we only need to cluster if there are more unique values for the grid cost than the number of bins desired
if (dtbl[,length(unique(grid_cost))] > nbins) {
bins <- kmeans(dtbl[, grid_cost], nbins)$cluster
} else {
unique_vals <- sort(unique(dtbl[, grid_cost]))
bins <- dtbl[,which(unique_vals==grid_cost)]
}
return(bins)
}
然后我用数据表调用函数:
nbins <- 10
scurve[, bin := make_bins(.SD, nbins), by=c("ReEDSregion", "class")]
但它显示错误:
[.data.table(scurve, , :=(bin, make_bins(.SD, nbins)) 中的错误,by = c("ReEDSregion", :
提供 3 个项目分配给“bin”列中大小为 7 的第 8 组。 RHS 长度必须为 1(单个值即可)或与 LHS 长度完全匹配。如果您希望“回收” RHS,请明确使用 rep() 以向您的代码读者明确这一意图。
这是什么意思?有人可以帮我吗?
我的数据表版本是1.12.2。
【问题讨论】:
标签: r data.table