1

我有以下内容data.table,其中包含group个人和一些描述他们的特征

set.seed(1)
library(data.table)

group<-(rep(1:10, sample(50:200, 10, replace=T)))
gender<-factor((sample(0:1, 1328, replace=T, prob=c(0.55, 0.45))))
country<-factor((sample(6030:6098, 1328, replace=T)))
ethnicity<-factor((sample(7040:7101, 1328, replace=T)))
yearbirth<-(sample(1950:1986, 1328, replace=T))
dt<-data.table(group, gender, country, ethnicity, yearbirth)
setkey(dt, group)

对于每个组,我想运行以下功能

library(cluster)
library(fpc)

ASW<-function(x){

  x<-as.data.frame(x)
  people<-length(as.vector(x[,1]))
  if (people==1){
    p=0
  } else {
    diss<-daisy(x, metric="gower")
    if (people/3<2) {
      maxclus=2      
    } else {
      maxclus<-round(people/3)
    }  
    asw <- numeric(maxclus)
    for (k in 2:maxclus) asw[[k]] <- pam(diss, k, diss=T) $ silinfo $ avg.width
    k.best <- which.max(asw)
    p<-asw[k.best]
  }  
  swg<-numeric(2)
  swg[1]<-id
  swg[2]<-p
  swg
}

[请注意,由于不接受s,因此在内部ASW使用s 有效] 正如您所看到的,该函数作为结果生成 vector 。鉴于此函数将应用于 中的每个组,它将产生与组数相等的向量。作为全局结果,我想生成另一个(甚至另一个也可以),其中包含所有一起编辑的向量。我怎样才能做到这一点?我在下面的尝试显示了如何将该函数应用于每个组,但我不知道如何将所有“部分结果”存储到另一个表中。data.framedaisydata.tableswgdtdata.tabledata.frameswgrbind

dt[, ASW(.SD) [I don't know what should be here...] , by=group]

希望问题很清楚。非常感谢您的帮助!里卡多

4

0 回答 0