1

私は個人のsとそれらを説明するいくつかの特徴を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を受け入れないため、内部で sASWを使用して動作することに注意してください] ご覧のとおり、この関数は結果として vector を生成します。この関数が のすべてのグループに適用されるとすると、グループの数に等しい数のベクトルが生成されます。グローバルな結果として、一緒に編集されたすべてのベクトルを含む別の(または別のものでも構いません)を作成したいと思います。これどうやってするの?以下の私の試みは、関数をすべてのグループに適用する方法を示していますが、すべての「部分的な結果」を別のテーブルに保存する方法はわかりません。data.framedaisydata.tableswgdtdata.tabledata.frameswgrbind

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

質問が明確であることを願っています。ご協力いただきありがとうございます。リカルド

4

0 に答える 0