2011-05-30 17 views
5

R kodunda, eksik değerlerle ilgili bir sorun yaşıyorum. Aslında, basit Hot Deck yöntemini kullanarak bu değerleri nasıl uygulayacağınızı bilmiyorum. Örneğin, bu verilere sahip olmak gibi. 5 sütun kullanarakEksik değerler - Güverte komşusu yöntemi

1 1000.24457235   NA  NA   NA   NA  11 
2 10000132 111 2502357 0.19408587 0.19373610 0.6567305 0.01454520 0.13498823  69 
3 10000388 111 4472360 0.14774927 0.14918678 0.6853377 0.05233508 0.11314044 106 
4 10000792 111 666909 0.10520063   NA  NA   NA   NA  14 
5 10002737 111 1139613 0.19944986 0.20114918 0.3564355 0.20135391 0.24106136  23 
6 10002741 111 981574 0.11573570   NA  NA   NA   NA  13 
7 10002929 111 1417192 0.08770932 0.08387991 0.6106012 0.11078473 0.19473415  24 
8 10003396 111 444966 0.19026263 0.18784110 0.5215772 0.16844381 0.12213789  24 
9 10003517 111 1230589 0.16393216 0.16358568 0.4614005 0.26670712 0.10830670  19 
10 10003546 111 760847 0.12384748   NA  NA   NA   NA  10 

, en yakın değeri bulmak ve sonra değerler NA olan bu yerlerde o benzer davalı ile doldurmak gerekir.

Teşekkür ederiz.

+0

Verilerinizi sağlamak için lütfen 'dput' kullanın. Kod kullanım kodu biçimlendirme ikonunu biçimlendirmek için {{'} (veya dört boşlukla hizalayın), ayrıca bkz. Http://stackoverflow.com/editing-help. – Marek

+0

aslında, anlamadım, ama, bir şey anlamak için değişti :) – Cris

+0

Veri biçimlendirme ekliyorum. Ancak, örnek verileri göndermek istediğinizde, tüm ayrıntılarla birlikte R nesnesinin dize temsili oluşturduğu dput (my_data) '(veya' head (dput (my_data)) 'gibi' dput' komutunu kullanabilirsiniz. – Marek

cevap

6

Hiç zaman sıcak (veya bu konuda soğuk) güverte örneklemesini kullanmamıştım. Ancak küçük bir Googling beni rrp paketindeki rrp.impute fonksiyonuna yönlendirdi.

İşte bazı sentetik veriler kullanılarak basit bir örnek:

install.packages("rrp") 
require(rrp) 
set.seed(1) 
key <- 1:100 
## create random values 
value1 <- 10 + 2 * key + rnorm(100, 0, 10) 
## make 5 values into NAs 
missing <- sample(key, 5) 
value1[missing] <- NA 
## build a dataframe 
df <- data.frame(key, value1) 
## do a nearest neighbor hot deck interpolation 
imputed <- rrp.impute(df)$new.data 

## let's visualize this magic 
plot(df) 
points(missing, imputed$value1[missing], col="red") 

Bu Ne istediğini düşünüyorum budur k = 1, varsayılan değerini kullanır. sonunda güzel bir resim gibi görünür:

enter image description here

kırmızı çevrelerinde

emsal değerlerdir ve onlar sadece en yakın komşu olduklarını görebilirsiniz.

+0

İnternette arama hakkında: inside-R, R paket dokümantasyonu, [hotdeck] (http://www.inside-r.org/search/node/hotdeck) veya [hot deck] (http: //www.inside-r.org/search/node/hot%20deck) birkaç sonuç verir. – Marek

+0

Google sürekli olarak daha iyi (en azından benim için) R ile yapıyor. İşte yaptığım arama: http://www.google.com/search?client=ubuntu&channel=fs&q=hot+deck+imputation+r&ie=utf-8&oe = uTF-8 –

1

hazır bir R paketi olup olmadığını bilmiyorum, ama bu hile yapar: davanız için gereken + belki başka mesafe ölçüsünü almak nerede

dfr<-data.frame(c1=c(123,132,388,792,2737,2741,2929,3396,3517,3546), 
c2=c(0.244,0.194,0.47,0.105,0.199,0.115,0.087,0.190,0.163,0.123), 
c3=c(NA, 0.193,0.149, NA, 0.201, NA, 0.083,0.187,0.163,NA)) 

hdidx<-which(!is.na(dfr[,3])) 
hd<-dfr[hdidx,] 
md<-dfr[-hdidx,] 
closesthd<-sapply(md[,2], function(curval){which.min(abs(curval-hd[,2]))}) 
md[,3]<-hd[closesthd,3] 

sütun numaralarını değiştirin.

İlgili konular