R'deki şekil dosyasındaki satırları kaldırma


12

R'ye bir şekil dosyası aktardım ve bir tabloya kattım. Şekil dosyam tüm nüfus sayımı kimliklerini içerirken, tablom yalnızca seçilen nüfus sayımı kimliklerini içeriyor. Şimdi bir satır alamadım tüm satırları silmek çalışıyorum.

Bu benim veri kümesi gibi görünüyor (Ben NA ile tüm satırları kaldırmaya çalışıyorum, bu yüzden son iki kaldırılması gerekir):

  CTUID   Cluster   Average
5350007.01  1       124.53
5350007.02  1       234.87
5350010.01  4       110.11
5350010.02  5       187.68
5350001     NA        NA
5350002     NA        NA

Bu satır kodunu kullanmayı denedim:

shape2[!(rowSums(is.na(shape2))==NCOL(shape2)),]

Hangi bana bu hatayı verdi:

Error in rowSums(is.na(shape2)) : 
  'x' must be an array of at least two dimensions
In addition: Warning message:
In is.na(shape2) : is.na() applied to non-(list or vector) of type 'S4'

R konusunda çok yetenekli değilim, bu yüzden herhangi bir yardım gerçekten takdir edilecektir. Eğer fantastik olurdu kısa bir açıklama ekleyebilirsiniz.

Yanıtlar:


13

Hatanın bilgilendirici kısmı, üzerinde çalıştığınız verilerin bir S4 sınıfı nesnesidir ve bu nedenle yuvalar içermesidir. Bu, veri çerçevenizi içeren uygun "@verta" yuvasında çalışmanız gerektiği anlamına gelir.

NA değerlerine sahip "tüm" satırları silmek istiyorsanız, veri çerçevesi yuvasında na.omit kullanabilirsiniz. Bu, sp nesnesi boyunca ilerler ve diğer yuvalardaki ilişkili noktaları / çokgenleri kaldırır.

shape@data <- na.omit(shape@data)

Belirli bir sütundaki NA'lı satırları kaldırmak istiyorsanız şunları kullanabilirsiniz:

shape@data <- shape[!is.na(shape@data$col) ,]

**** Güncelleme 03/08/2016 Artık sp nesnelerinde çalışan yerel bir birleştirme işlevi var. Birleştirme işlemini diğer tüm dataframe'lerde yaptığınız gibi çağırabilirsiniz. Ancak x argümanı bir sp SpatailDataFrame sınıf nesnesidir ve y birleştirmek istediğiniz herhangi bir data.frame'dir. Referans amacıyla orijinal cevabı bırakıyorum.


Ayrıca bir sp nesnesine katılmak için birleştirme işlevini kullanamayacağınızı belirtmek gerekir. Birleştirme işlevi, işlem sırasında sp nesnesindeki iç ilişkiyi kesen verileri kullanır. Bu, maalesef, yaygın olarak reklamı yapılmayan bir şey. Bir veri çerçevesini bir sp nesnesinin @ veri yuvasına birleştirmek için eşleştirmeyi bu şekilde kullanabilirsiniz.

shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])

Nerede; şekil, şekil dosyanızdır, IDS, birleştirmek istediğiniz tanımlayıcıdır ve OtherData, şekil ile birleştirmek istediğiniz veri çerçevesidir. IDS'nin iki veri kümesinde farklı adlar olabileceğini, ancak aslında aynı değerlerin (bulanık değil) olması gerektiğini unutmayın.

Alternatif olarak bu işlevi kullanabilirsiniz.

join.sp.df <- function(x, y, xcol, ycol) {
  x$sort_id <- 1:nrow(as(x, "data.frame"))  
    x.dat <- as(x, "data.frame")  
     x.dat2 <- merge(x.dat, y, by.x = xcol, by.y = ycol)  
    x.dat2.ord <- x.dat2[order(x.dat2$sort_id), ]  
  x2 <- x[x$sort_id %in% x.dat2$sort_id, ]  
  x2.dat <- as(x2, "data.frame") 
    row.names(x.dat2.ord) <- row.names(x2.dat)  
  x2@data <- x.dat2.ord  
  return(x2)
}

Nerede; x = sp SpatialDataFrame nesnesi, y = x ile birleştirilecek dataframe nesnesi, xcol = sp nesnesindeki sütun adını birleştir (alıntı yapmanız gerekir), ycol = dataframe nesnesindeki sütun adını birleştir (alıntı yapmanız gerekir).

Nedense @Kelly sorusuna yorum yapamıyorum, bu yüzden orijinal cevabımı düzenliyorum. Hangi R ve SP sürümünü çalıştırdığınızı kontrol edin? Öğrenmek için SessionInfo () komutunu çalıştırabilirsiniz. @Data nesnesini işlerken diğer veri yuvalarındaki ilişkili nesneleri kaldırma davranışı yalnızca son çift sp sürümünde mevcuttur. Geçerli bir sürümü çalıştırmıyorsanız, paketi paketler menüsü altındaki "Paketleri güncelle" ile güncellemeyi deneyin. > = Windows Vista çalışıyorsa yönetici olarak çalıştırdığınızdan emin olun. Ayrıca, nesne boyutlarından önce ve sonra, yani satır / sütun sayısını temsil eden dim (şekil) öğelerine de bakın. Satır sayısı, özellik nesnelerinin sayısına karşılık gelir. Uzamsal nesnedeki satır sayısının @ veri yuvasındaki satır sayısıyla eşleşip eşleşmediğini kontrol ederek sonuçları kontrol edebilirsiniz, yani dim (şekil);


Yardımın için teşekkürler! Mekansal birleşimi yeniden düzenledim çünkü 'eşleşme' yerine 'birleştirme' kullandım. Tüm NA satırlarını kaldırdım, ancak şekil çizdiğimde şekil dosyasında hala mevcut. Bunun neden olduğuna dair düşünceleriniz var mı?
Kelly

1.0-15. S'de bu cevapta bir değişiklik yapılması gerekmektedir. Birleştirme işlevinin sp'ye özgü bir sürümü şimdi, bir sp sınıfı nesnesi iletildiğinde, satır boyutlarını ilişkili yuvalarla tutarlı tutmak için bire bir eşleşme gerçekleştirdiğinizde doğru performans gösteren çağrılır.
Jeffrey Evans

7

Paketlerdeki güncellemelerle aşağıdakileri öneririm:

shape <- shape[!is.na(shape@data$col),]

Geçmiş şekillerde "şekil" bir data.frame içine zorla neden olurdu. Sp geliştiricilerinin bazı standart R yöntemlerinin sp nesneleri üzerinde çalışmasını sağlamaya başlaması hoş. Bu güncellemeyi sağladığınız için teşekkür ederiz.
Jeffrey Evans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.