त्रुटि का सूचनात्मक हिस्सा यह है कि आप जिस डेटा पर काम कर रहे हैं वह एक एस 4 क्लास ऑब्जेक्ट है और जैसे कि स्लॉट्स हैं। इसका मतलब है कि आपको अपने डेटाफ़्रेम वाले उपयुक्त स्लॉट "@ डाटा" पर काम करना होगा।
यदि आप NA मानों के साथ "सभी" पंक्तियों को हटाना चाहते हैं तो आप डेटाफ्रेम स्लॉट पर सिर्फ na.omit का उपयोग कर सकते हैं। यह sp ऑब्जेक्ट के माध्यम से प्रोपेगेट करता है और अन्य स्लॉट्स में संबंधित बिंदुओं / बहुभुजों को हटाता है।
shape@data <- na.omit(shape@data)
यदि आप NA के साथ पंक्तियों को हटाना चाहते हैं, तो आप एक विशिष्ट कॉलम का उपयोग कर सकते हैं:
shape@data <- shape[!is.na(shape@data$col) ,]
**** अद्यतन 03/08/2016 अब एक देशी मर्ज फ़ंक्शन है जो sp ऑब्जेक्ट्स पर काम करता है। आप मर्ज को उसी तरह से कॉल कर सकते हैं जैसे आप किसी अन्य डेटा.फ्रेम के साथ करते हैं। हालाँकि x तर्क एक Sp SpailailDataFrame वर्ग ऑब्जेक्ट है और y कोई भी डेटा है। आप मर्ज करना चाहते हैं। मैं संदर्भ उद्देश्यों के लिए मूल उत्तर छोड़ रहा हूं।
मुझे यह भी इंगित करना चाहिए कि आप किसी ऑब्जेक्ट में शामिल होने के लिए मर्ज फ़ंक्शन का उपयोग नहीं कर सकते हैं। मर्ज फ़ंक्शन ऑपरेशन के दौरान डेटा को रीसेट करता है जो कि स्पॉन ऑब्जेक्ट में आंतरिक संबंध को तोड़ता है। यह कुछ ऐसा है जो दुर्भाग्य से, व्यापक रूप से विज्ञापित नहीं है। किसी sp ऑब्जेक्ट के @data स्लॉट में डेटाफ़्रेम मर्ज करने के लिए आप इस तरह से मैच का उपयोग कर सकते हैं।
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
कहाँ पे; आकार आपकी आकृति फ़ाइल है, आईडीएस वह पहचानकर्ता है जिस पर आप विलय करना चाहते हैं और अन्य डेटाटाफ़ है जो आप आकृति के साथ संयोजन करना चाहते हैं। ध्यान दें कि आईडीएस दो डेटासेट में अलग-अलग नाम हो सकते हैं, लेकिन वास्तव में समान मूल्य (फजी नहीं) होने की आवश्यकता है।
वैकल्पिक रूप से आप इस फ़ंक्शन का उपयोग कर सकते हैं।
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)
}
कहाँ पे; x = sp SpatialDataFrame ऑब्जेक्ट, y = डेटाफ्रेम ऑब्जेक्ट को x के साथ मर्ज करने के लिए x, xcol = मेर कॉलम कॉलम नेम ऑब्जेक्ट में (कोट करने की जरूरत है), ycol = डेटाफ्रेम ऑब्जेक्ट में कॉलम का नाम (क्विट करने की जरूरत है)।
किसी कारण से मैं @ केली प्रश्न पर टिप्पणी नहीं कर सकता, इसलिए मैं अपना मूल उत्तर संपादित कर रहा हूं। जांचें कि आप R और Sp का कौन सा संस्करण चला रहे हैं? यह जानने के लिए आप SessionInfo () चला सकते हैं। अन्य डेटा स्लॉट्स में संबंधित ऑब्जेक्ट्स को हटाने का व्यवहार जब @data ऑब्जेक्ट को मैनिपुलेट करने का काम केवल अंतिम जोड़े sp संस्करणों में उपलब्ध है। यदि वर्तमान संस्करण नहीं चल रहा है, तो पैकेज मेनू के तहत "अपडेट पैकेज" के साथ पैकेज को अपडेट करने का प्रयास करें। यदि रनिंग> = विंडोज विस्टा प्रशासक के रूप में चलना सुनिश्चित हो। ऑब्जेक्ट आयामों के पहले और बाद में भी देखें, मंद (आकार), जो पंक्तियों / कॉल की संख्या का प्रतिनिधित्व करता है। पंक्तियों की संख्या फीचर ऑब्जेक्ट की संख्या से मेल खाती है। आप यह देख कर परिणामों की जाँच कर सकते हैं कि क्या स्थानिक वस्तु में पंक्तियों की संख्या @data स्लॉट में पंक्तियों की संख्या से मेल खाती है, यानी मंद (आकार);