1

R の多くの操作では、データセットから NA を削除する必要があります。私の場合、kmeans を使用して連続測定を 3 つの要因に分割したいと考えています。

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

これは明らかに、media.2006 とは異なる長さのベクトルを作成します。私がやりたいことは、このベクトルを media.2006 (または同じ長さの新しいベクトル) に置き換えることです。私がやりたいことは、次のようなループを書くことだと思いますが、NA をスキップするようにカウンターに指示します。

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])
 }
}

明確にするために、これは機能しませんが、i-counter が NA に遭遇した場合 (しゃれを許してください) をスキップするように j-counter に指示できれば、このようなものが機能すると思います。何か案は?

参考までに、私は持っています:

> 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

1 に答える 1

4

思ったより簡単です。

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

is.naの論理ベクトルを返し、length(media.2006)それ!を反転するため、media.2006 の NA ではないすべてのものを kmeans.2006 に置き換えるように指示しています。

于 2012-08-17T13:10:39.763 に答える