我有以下内容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.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]
希望问题很清楚。非常感谢您的帮助!里卡多