2012-08-17 141 views
1

R中的許多操作都需要從數據集中刪除NA。在我的情況,我想用k均值爲連續測量劃分爲三個因素:刪除它們後加回NA

kmeans.2006<-kmeans(na.omit(media.2006), 3) 

顯然,這將創建不同的長度,以media.2006向量。我想要做的是將此矢量替換爲媒體2006(或相同長度的新矢量)。我想我想要做的是寫一個類似於下面的循環,但告訴計數器跳過任何NAs。

kmeans.2006<-kmeans(na.omit(media.2006), 3) 

n <- length(media.2006) 
k <- length(kmeans.2006) 

media.factor.2006 <- rep(NA, n) 

for(i in 1:n){ 
for(j in 1:k){ 
media.factor[i] <- ifelse(is.na(media.2006[i]) != TRUE, kmeans.2006[j], media.2006[i]) 
} 
} 

需要明確的是,這是不行的,但我想這樣的事情woudl工作,如果我能告訴J-計數器跳過其中的i-計數器遭遇(原諒雙關語)的情況下一個NA。有任何想法嗎?

僅供參考,我有:

> dput(media.2006) 
c(NA, NA, NA, 0L, 0L, 0L, 385L, 0L, 51L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 47L, 20L, NA, 0L, 16L, 116L, 84L, 20L, NA, 0L, 3L, 
28L, 940L, 741L, 177L, 984L, 0L, 27L, 19L, 294L, 79L, 1L, 17L, 
152L, 35L, 87L, 946L, 0L, 0L, 0L, 27L, 10L, 9L, 395L, 25L, 0L, 
0L, 0L, 0L, 58L, 1198L, 0L, 0L, 0L, NA, 19L, 0L, 19L, 2L, 0L, 
2L, 25L, 0L, 0L) 

回答

4

它比你想象。

media.factor.2006 <- rep(NA, length(media.2006)) 
media.factor.2006[!is.na(media.2006)] <- kmeans.2006$cluster 

is.na返回length(media.2006)邏輯向量和!你反其道而行,讓你在告訴與kmeans.2006的一切,這不是一個NA在media.2006更換。

相關問題