私は個人の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.frame
daisy
data.table
swg
dt
data.table
data.frame
swg
rbind
dt[, ASW(.SD) [I don't know what should be here...] , by=group]
質問が明確であることを願っています。ご協力いただきありがとうございます。リカルド