ส่วนที่ให้ข้อมูลของข้อผิดพลาดคือข้อมูลที่คุณทำงานเป็นวัตถุคลาส S4 และเช่นนั้นมีช่อง ซึ่งหมายความว่าคุณต้องดำเนินการในช่องที่เหมาะสม "@data" ที่มี dataframe ของคุณ
หากคุณต้องการลบแถว "ทั้งหมด" ที่มีค่า NA คุณสามารถใช้ na.omit บนสล็อตดาต้าเฟรม สิ่งนี้จะทำให้เกิดการทะลุผ่านวัตถุ sp และลบคะแนน / รูปหลายเหลี่ยมที่เกี่ยวข้องในช่องอื่น ๆ
shape@data <- na.omit(shape@data)
หากคุณต้องการลบแถวที่มี NA ในคอลัมน์ใดคอลัมน์หนึ่งคุณสามารถใช้:
shape@data <- shape[!is.na(shape@data$col) ,]
**** อัพเดท 03/08/2016 ขณะนี้มีฟังก์ชั่นผสานพื้นเมืองที่ทำงานบนวัตถุ sp คุณสามารถโทรผสานในลักษณะเดียวกับที่คุณทำกับ data.frame อื่น ๆ อย่างไรก็ตามอาร์กิวเมนต์ x เป็นวัตถุคลาส Sp SpatailDataFrame และ y คือ data.frame ใด ๆ ที่คุณต้องการผสาน ฉันจะทิ้งคำตอบเดิมไว้เพื่อใช้อ้างอิง
ฉันควรจะชี้ให้เห็นว่าคุณไม่สามารถใช้ฟังก์ชั่นผสานเพื่อเข้าร่วมวัตถุ sp ฟังก์ชั่นผสานใช้ข้อมูลในระหว่างการดำเนินการซึ่งทำลายความสัมพันธ์ภายในในวัตถุ sp นี่คือสิ่งที่น่าเสียดายที่ไม่ได้โฆษณาอย่างกว้างขวาง ในการผสานดาต้าเฟรมเข้ากับช่อง @data ของวัตถุ sp คุณสามารถใช้การจับคู่ด้วยวิธีนี้
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
ไหน; shape เป็นไฟล์รูปร่างของคุณ IDS เป็นตัวระบุที่คุณต้องการผสานและ OtherData เป็น dataframe ที่คุณต้องการรวมเข้ากับรูปร่าง โปรดทราบว่า 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 = วัตถุ dataframe ที่จะรวมกับ x, xcol = รวมชื่อคอลัมน์ในวัตถุ sp (ต้องอ้าง), ycol = รวมชื่อคอลัมน์ในวัตถุ dataframe (จำเป็นต้องพูด)
ด้วยเหตุผลบางอย่างฉันไม่สามารถแสดงความคิดเห็นใน @Kelly คำถามดังนั้นฉันกำลังแก้ไขคำตอบเดิมของฉัน ตรวจสอบว่าคุณใช้ R และ sp เวอร์ชันใดอยู่ คุณสามารถเรียกใช้ SessionInfo () เพื่อค้นหา พฤติกรรมของการลบวัตถุที่เกี่ยวข้องในช่องข้อมูลอื่นเมื่อจัดการวัตถุ @data มีให้บริการเฉพาะในรุ่น sp คู่สุดท้าย หากไม่ได้ใช้เวอร์ชันปัจจุบันให้ลองอัปเดตแพ็คเกจด้วย "อัพเดตแพ็คเกจ" ใต้เมนูแพคเกจ หากใช้งาน> = Windows Vista ต้องแน่ใจว่าได้ทำงานเป็นผู้ดูแลระบบ ดูขนาดวัตถุของคุณก่อนและหลังเช่น dim (รูปร่าง) ซึ่งแสดงถึงจำนวนแถว / cols จำนวนแถวสอดคล้องกับจำนวนของคุณสมบัติวัตถุ คุณสามารถตรวจสอบผลลัพธ์ได้ด้วยการตรวจสอบเพื่อดูว่าจำนวนแถวในวัตถุเชิงพื้นที่ตรงกับจำนวนแถวในช่อง @data เช่นสลัว (รูปร่าง) หรือไม่