ทำไมฉันถึงได้รับค่า NA หลังจากตั้งค่าย่อยใน R?

คุณจะรู้ไหมว่าทำไมฉันถึงได้รับค่า NA หลังจากแบ่งย่อยการสังเกตลงในกรอบข้อมูลใหม่ และวิธีแก้ปัญหานี้ นี่คือวิธีที่ฉันดำเนินการ - โปรดแจ้งให้เราทราบเกี่ยวกับข้อผิดพลาดใดๆ ที่ฉันอาจทำ

กรอบข้อมูลของฉันคือ LE2010 ฉันได้จัดอันดับผลิตภัณฑ์ตามลำดับจากน้อยไปหามาก และต้องการเลือก 5 แถวแรกและ 5 แถวสุดท้าย (แถวที่มีผลิตภัณฑ์สูงสุดและต่ำสุด)

 head(LE2010)
      ward.name ward.code electorate votescast  turnout
 111   Haverstock E05000136       8621      3123 36.22550
 361   Courtfield E05000386       6407      2400 37.45903
 358     Brompton E05000383       5918      2362 39.91213
 365    Hans Town E05000390       6787      2722 40.10609
 370 Queen's Gate E05000395       6258      2565 40.98754
 363 Earl's Court E05000388       6514      2723 41.80227
 tail(LE2010)
  ward.name ward.code electorate votescast  turnout
 534 South   E05000559       7356      5589 75.97879
 535 Cheam   E05000560       7765      5929 76.35544
 499 Kew     E05000524       8212      6320 76.96055
 166 Southf. E05000191       8803      6803 77.28047
 99  Petts   E05000124      11000      8594 78.12727
 492 East    E05000517       7460      5871 78.69973

จากนั้นผมเลือก 5 แถวแรกและ 5 แถวสุดท้าย (ผมไม่แน่ใจว่าต้องทำอย่างไรจึงจะผิดพลาดได้จากตรงนี้...

#Select the first 5 first and 5 last rows
LE2010.2 <- LE2010[1:5, ][620:624, ]
LE2010.2
 ward.name ward.code electorate votescast turnout
NA        <NA>      <NA>         NA        NA      NA
NA.1      <NA>      <NA>         NA        NA      NA
NA.2      <NA>      <NA>         NA        NA      NA
NA.3      <NA>      <NA>         NA        NA      NA
NA.4      <NA>      <NA>         NA        NA      NA

ตอนนี้ค่าในเซ็ตย่อยของฉันคือ NAs... มีความคิดว่าทำไมและจะแก้ไขปัญหานี้อย่างไร ขออภัยล่วงหน้า นี่เป็นคำถามมือใหม่ :)

ขอบคุณ

เมโลดี้


person Mélody Barreau    schedule 30.04.2015    source แหล่งที่มา


คำตอบ (2)


คำอธิบายเหตุใดโค้ดของคุณจึงใช้งานไม่ได้:

LE2010.2 <- LE2010[1:5, ][620:624, ]

LE2010[1:5, ] คว้า 5 แถวแรกของ LE2010 นี่คือสิ่งแรกที่คุณพิมพ์ ดังนั้นเซ็ตย่อยนี้จึงถูกดำเนินการก่อน เมื่อคุณติดวงเล็บเพิ่มเติมที่ส่วนท้าย คุณกำลังพยายามสับเซตอีกครั้ง แต่จุดเริ่มต้นคือสับเซตที่คุณสร้างไว้แล้ว ดังนั้นคุณจึงลองหาแถวที่ 620 ถึง 624 ของสับเซต 5 แถว เนื่องจากมีเพียง 5 แถว NA จึงถูกส่งคืน

ดังที่ @cory พูดว่า LE2010[c(1:5, 620:624), ] จะใช้ได้ผลเนื่องจากคุณรับชุดย่อยเพียงชุดเดียวเท่านั้น อีกวิธีหนึ่งก็คงจะเป็น

rbind(head(LE2010, 5), tail(LE2010, 5))

ฉันชอบใช้ tail เพราะคุณไม่จำเป็นต้องรู้ว่ามีกี่แถว แค่เลือกจากจุดสิ้นสุดเท่านั้น ที่นี่ฉันกำลังนำสองเซ็ตย่อยมารวมเข้าด้วยกัน แต่เซ็ตย่อยทั้งสองอ้างอิงถึงวัตถุต้นฉบับ

person Gregor Thomas    schedule 30.04.2015
comment
เยี่ยมเลย ได้ผล และฉันเข้าใจว่าทำไมต้องขอขอบคุณคุณและคอรี ขอบคุณมาก! - person Mélody Barreau; 30.04.2015

ลองสิ่งนี้:

LE2010.2 <- LE2010[c(1:5, 620:624), ]
person cory    schedule 30.04.2015