2014-12-18 14 views
5

Ho bisogno di raggruppare alcuni dati e ho provato kmeans, pam, e clara con R.NA in funzioni di clustering (kmeani, pam, clara). Come associare i cluster ai dati originali?

Il problema è che i miei dati sono in una colonna di un frame di dati, e contiene AN.

Ho usato na.omit() per ottenere i miei cluster. Ma allora come posso associarli ai dati originali? Le funzioni restituiscono un vettore di numeri interi senza le NA e non conservano alcuna informazione sulla posizione originale.

Esiste un modo intelligente per associare i cluster alle osservazioni originali nel frame di dati? (O un modo per eseguire intelligente raggruppamento quando AN sono presenti?)

Grazie

+0

hai chiamato le righe? penso che i cineasti e i pam (almeno) mantengano i nomi delle file, no? – agenis

+0

provato, ma no:/ – Bakaburg

+0

Faccio questo modo: kmeans (na.omit (x), k) – Bakaburg

risposta

6

L'uscita kmeans corrisponde agli elementi dell'oggetto passato come argomento x. Nel tuo caso, ometti gli elementi NA e così $cluster indica il cluster a cui appartiene ciascun elemento di na.omit(x).

Ecco un semplice esempio:

d <- data.frame(x=runif(100), cluster=NA) 
d$x[sample(100, 10)] <- NA 
clus <- kmeans(na.omit(d$x), 5) 

d$cluster[which(!is.na(d$x))] <- clus$cluster 

E nel grafico qui sotto, il colore indica il cluster che ogni punto appartiene.

plot(d$x, bg=d$cluster, pch=21) 

enter image description here

0

Questo codice funziona per me, a partire da una matrice contenente una fila di AN:

DF=matrix(rnorm(100), ncol=10) 
row.names(DF) <- paste("r", 1:10, sep="") 
DF[3,]<-NA 
res <- kmeans(na.omit(DF), 3)$cluster 
res 
DF=cbind(DF, 'clus'=NA) 
DF[names(res),][,11] <- res 
print(DF[,11]) 
Problemi correlati