ทำความเข้าใจ NA ใน R
เรียนรู้ความหมายของ NA เหตุผลที่ NA แพร่ต่อไป และความแตกต่างระหว่าง NA กับ NULL
ทำความเข้าใจ NA ใน R เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
NA ใน R คืออะไร
NA ย่อมาจาก Not Available ซึ่งหมายถึงค่าที่ขาดหายไปหรือไม่ทราบค่า ต่างจาก NULL (ไม่มีวัตถุ) หรือ NaN (ไม่ใช่จำนวน) ตรงที่ NA เป็นตัวแทนของข้อมูลที่มีอยู่แต่ไม่ทราบค่า
# NA represents a missing value
height_cm <- c(175, NA, 162, 188, NA, 170)
cat('Heights:', height_cm, '
')
cat('Length:', length(height_cm), '
') # NA counts as an element
cat('Sum:', sum(height_cm), '
') # NA propagatesNA กับ NULL
NA คือค่าที่ขาดหายไปภายในเวกเตอร์ ช่องนั้นมีอยู่แต่ไม่ทราบค่า ส่วน NULL คือการไม่มีวัตถุอยู่เลย มีความยาวเป็น 0 และไม่สามารถจัดเก็บไว้ภายในเวกเตอร์ได้
# NA: element exists, value unknown
vec_with_na <- c(1, NA, 3)
cat('Vector with NA, length:', length(vec_with_na), '
') # 3
# NULL: nothing there at all
vec_with_null <- c(1, NULL, 3)
cat('Vector with NULL, length:', length(vec_with_null), '
') # 2!
# NULL gets dropped; NA is kept
cat('vec_with_na:', vec_with_na, '
')
cat('vec_with_null:', vec_with_null, '
')NA กับ NaN
NaN (Not a Number) เกิดจากการดำเนินการทางคณิตศาสตร์ที่ไม่กำหนดความหมาย เช่น 0/0 หรือ sqrt(-1) ค่านี้เป็นค่าตัวเลขพิเศษ ขณะที่ NA เป็นเครื่องหมายแสดงค่าที่ขาดหายไปทั่วไป ซึ่งใช้ได้กับข้อมูลทุกชนิด
# NaN from undefined operations
cat('0/0 =', 0/0, '
') # NaN
cat('sqrt(-1) =', sqrt(-1), '
') # NaN (with warning)
cat('Inf - Inf =', Inf - Inf, '
') # NaN
# NaN IS also NA (a special case)
cat('is.nan(NaN):', is.nan(NaN), '
')
cat('is.na(NaN): ', is.na(NaN), '
') # TRUE!
cat('is.nan(NA): ', is.nan(NA), '
') # FALSENA เทียบกับ Inf
Inf และ -Inf ใช้แทนค่าอนันต์บวกและอนันต์ลบ — ค่าทั้งสองเกิดจากการดำเนินการ เช่น 1/0 ซึ่งแตกต่างจาก NA ตรงที่ Inf เป็นค่าตัวเลขที่ทราบแน่ชัด (แม้จะมีขนาดสุดขั้ว) และเข้าร่วมการเปรียบเทียบได้ตามปกติ
cat('1/0 =', 1/0, '
') # Inf
cat('-1/0 =', -1/0, '
') # -Inf
cat('Inf + 1 =', Inf + 1, '
') # Inf
cat('Inf > 1000:', Inf > 1000, '
') # TRUE
cat('is.infinite(Inf):', is.infinite(Inf), '
')
cat('is.na(Inf): ', is.na(Inf), '
') # FALSEการส่งต่อ NA ในการคำนวณเลขคณิต
NA มีคุณสมบัติ แพร่กระจายในการคำนวณเลขคณิต กล่าวคือ การดำเนินการใด ๆ ที่เกี่ยวข้องกับ NA จะคืนค่าเป็น NA ทั้งหมด ซึ่งเป็นพฤติกรรมที่ตั้งใจไว้ — หากค่าหนึ่งในการคำนวณไม่ทราบ ผลลัพธ์ก็ย่อมไม่ทราบเช่นกัน
x <- NA
cat('NA + 5: ', x + 5, '
') # NA
cat('NA * 0: ', x * 0, '
') # NA (not 0!)
cat('NA == NA:', x == NA, '
') # NA (not TRUE!)
cat('NA > 5: ', x > 5, '
') # NA
cat('sum(1,NA):', sum(1, NA), '
') # NAtypeof(NA) — NA ที่มีชนิดข้อมูล
NA ตามค่าเริ่มต้นมีชนิดเป็น logical โดย R มีรูปแบบ NA ที่ระบุชนิดสำหรับชนิดข้อมูลพื้นฐานแต่ละชนิด ซึ่งสำคัญเมื่อทำงานกับเวกเตอร์ที่มีชนิดข้อมูลชัดเจน เพื่อหลีกเลี่ยงการแปลงชนิดข้อมูลโดยไม่ตั้งใจ
cat('typeof(NA): ', typeof(NA), '
') # logical
cat('typeof(NA_integer_): ', typeof(NA_integer_), '
') # integer
cat('typeof(NA_real_): ', typeof(NA_real_), '
') # double
cat('typeof(NA_complex_): ', typeof(NA_complex_), '
') # complex
cat('typeof(NA_character_):', typeof(NA_character_), '
') # characterการใช้ NA_integer_ ในทางปฏิบัติ
เมื่อสร้างเวกเตอร์จำนวนเต็มที่มีค่าหายไป ให้ใช้ NA_integer_ เพื่อรักษาชนิดของเวกเตอร์ให้ถูกต้อง การใช้ NA แบบทั่วไปอาจทำให้เกิดการแปลงชนิดข้อมูลโดยปริยายเป็น double ในบางบริบท
# Using plain NA in an integer vector
v1 <- c(1L, 2L, NA, 4L)
cat('typeof with NA: ', typeof(v1), '
') # integer (OK here)
# Explicit typed NA is safer in functions
v2 <- c(1L, 2L, NA_integer_, 4L)
cat('typeof with NA_integer_:', typeof(v2), '
') # integer
# Check they behave the same
cat('Same?', identical(v1, v2), '
')NA_real_ และ NA_character_
ใช้ NA_real_ สำหรับค่าหายไปในเวกเตอร์ double (numeric) และใช้ NA_character_ สำหรับข้อความที่หายไป ค่าเหล่านี้สำคัญอย่างยิ่งเมื่อสร้างเวกเตอร์ภายในฟังก์ชันที่ต้องรักษาความสอดคล้องของชนิดข้อมูล
# Character vector with missing
names_vec <- c('Alice', 'Bob', NA_character_, 'Dave')
cat('Names:', names_vec, '
')
cat('typeof:', typeof(names_vec), '
')
# Numeric with missing
readings <- c(22.5, NA_real_, 21.3, NA_real_, 24.1)
cat('Readings:', readings, '
')
cat('Non-NA count:', sum(!is.na(readings)), '
')NA ในการดำเนินการทางตรรกะ
การมี NA ในการดำเนินการทางตรรกะเป็นไปตาม ตรรกะแบบสามค่า: TRUE | NA ให้ผลเป็น TRUE (เพราะ TRUE OR ค่าใด ๆ ย่อมเป็น TRUE) แต่ FALSE | NA ให้ผลเป็น NA (เราไม่สามารถระบุผลลัพธ์ได้หากไม่ทราบค่าของ NA)
cat('TRUE | NA:', TRUE | NA, '
') # TRUE
cat('FALSE | NA:', FALSE | NA, '
') # NA
cat('TRUE & NA:', TRUE & NA, '
') # NA
cat('FALSE & NA:', FALSE & NA, '
') # FALSE
# Never use == to test for NA!
cat('NA == NA:', NA == NA, '
') # NA (not TRUE!)
cat('is.na(NA):', is.na(NA), '
') # TRUE (correct way)NA ในเวกเตอร์และกรอบข้อมูล
ข้อมูลจริงมักมีค่าหายไปอยู่เสมอ การเข้าใจพฤติกรรมของ NA จะช่วยให้คุณตีความค่าสรุปได้อย่างถูกต้อง ตรวจพบปัญหาคุณภาพข้อมูล และเลือกวิธีจัดการที่เหมาะสม
ages <- c(25, NA, 32, NA, 29, 41, NA, 35)
cat('Ages:', ages, '
')
cat('Length:', length(ages), '
')
cat('Missing count:', sum(is.na(ages)), '
')
cat('Present count:', sum(!is.na(ages)), '
')
cat('Mean (fails):', mean(ages), '
') # NA
cat('Mean (works):', mean(ages, na.rm = TRUE), '
') # 32.4ชนิดของ NA: ภาพรวมทั้งหมด
ต่อไปนี้คือสรุปค่าพิเศษที่เกี่ยวข้องกับ NA ใน R:
NA— ค่าหายไปทั่วไป (ชนิด logical)NA_integer_,NA_real_,NA_complex_,NA_character_— NA ที่ระบุชนิดข้อมูลNaN— ตัวเลขที่ไม่กำหนด (ผลลัพธ์จาก 0/0, sqrt(-1))Inf,-Inf— ค่าอนันต์ (ผลลัพธ์จาก 1/0)NULL— การไม่มีออบเจ็กต์ (ความยาว 0)
# Test functions for special values
x <- c(1, NA, NaN, Inf, -Inf, 0)
cat('Values: ', x, '
')
cat('is.na(): ', is.na(x), '
') # TRUE for NA and NaN
cat('is.nan(): ', is.nan(x), '
') # TRUE only for NaN
cat('is.infinite(): ', is.infinite(x), '
') # TRUE for Inf and -Inf
cat('is.finite(): ', is.finite(x), '
') # TRUE only for normal numbersตรวจสอบอย่างรวดเร็ว
NA == NA ให้ผลลัพธ์เป็นอะไรใน R?
ทบทวน: ทำความเข้าใจ NA
ยอดเยี่ยมครับ/ค่ะ! ประเด็นสำคัญจากบทเรียนนี้มีดังนี้:
NA= ค่าหายไป (ทราบว่ามีค่าอยู่ แต่ไม่ทราบค่าที่แท้จริง)NULL= การไม่มีออบเจ็กต์ (ถูกนำออกจากเวกเตอร์)NaN= ผลลัพธ์การคำนวณที่ไม่กำหนด (และเป็น NA ด้วย)Inf/-Inf= ค่าอนันต์ (ไม่ใช่ NA)- NA แพร่กระจายในการคำนวณเลขคณิต — การดำเนินการกับ NA จะคืนค่าเป็น NA
- ใช้ NA ที่ระบุชนิดข้อมูล (
NA_integer_เป็นต้น) เพื่อให้โค้ดปลอดภัยด้านชนิดข้อมูล - ตรวจสอบ NA ด้วย
is.na()เสมอ และอย่าใช้== NA
# Key tests side by side
special_vals <- list(NA=NA, NaN=NaN, Inf=Inf, 'NULL-in-vec'=c(1,NULL,3)[2])
for (name in names(special_vals)) {
v <- special_vals[[name]]
cat(name, '| is.na:', is.na(v), '| is.nan:', is.nan(v[!is.infinite(v)]), '
')
}เรียนรู้ R ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 43
- บทเรียน
- 159
คำถามที่พบบ่อย
บทเรียน “ทำความเข้าใจ NA ใน R” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ทำความเข้าใจ NA ใน R” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ทำความเข้าใจ NA ใน R”
เรียนรู้ความหมายของ NA เหตุผลที่ NA แพร่ต่อไป และความแตกต่างระหว่าง NA กับ NULL คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ทำความเข้าใจ NA ใน R” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทำความเข้าใจ NA ใน R
- การตรวจหาและนับค่าที่หายไป
- การนำค่า NA ออกและแทนที่ค่า NA
- NA ในการคำนวณและการรวมค่า