การตรวจหาและนับค่าที่หายไป
ใช้ is.na(), anyNA() และ sum(is.na()) เพื่อตรวจสอบข้อมูลที่หายไป
การตรวจหาและนับค่าที่หายไป เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
is.na() — เครื่องมือหลักสำหรับตรวจหา
is.na(x) ตรวจสอบแต่ละสมาชิกของ x และคืนค่าเป็น เวกเตอร์ตรรกะที่มีความยาวเท่ากัน โดยให้ค่า TRUE เมื่อค่านั้นเป็น NA (หรือ NaN) นี่คือเครื่องมือพื้นฐานสำหรับตรวจหาค่าหายไป
heights <- c(175, NA, 162, 188, NA, 170, NA, 165)
cat('Heights:', heights, '
')
cat('is.na() :', is.na(heights), '
')
cat('!is.na():', !is.na(heights), '
')การนับ NA ด้วย sum(is.na())
เนื่องจาก TRUE == 1 และ FALSE == 0 ในการคำนวณเลขคณิต sum(is.na(x)) จึงใช้ นับจำนวนค่าหายไปทั้งหมดได้ ส่วน mean(is.na(x)) ให้สัดส่วนของค่าหายไป
survey <- c(8, NA, 6, NA, 9, 7, NA, 5, NA, 8)
cat('Survey responses:', survey, '
')
cat('Total NAs: ', sum(is.na(survey)), '
')
cat('Total present:', sum(!is.na(survey)), '
')
cat('NA proportion:', mean(is.na(survey)), '
')
cat('NA percentage:', mean(is.na(survey)) * 100, '%
')anyNA() — ตรวจสอบการมีอยู่แบบรวดเร็ว
anyNA(x) คืนค่า TRUE เพียงค่าเดียวหากสมาชิกใด ๆ เป็น NA มิฉะนั้นจะคืนค่า FALSE ฟังก์ชันนี้เร็วกว่าการใช้ any(is.na(x)) เพราะจะหยุดทันทีที่พบ NA ตัวแรก
complete_data <- c(1, 2, 3, 4, 5)
incomplete_data <- c(1, 2, NA, 4, 5)
cat('anyNA(complete) :', anyNA(complete_data), '
') # FALSE
cat('anyNA(incomplete):', anyNA(incomplete_data), '
') # TRUE
# Use in validation
if (anyNA(incomplete_data)) {
cat('Warning: data contains missing values!
')
}which(is.na()) — ค้นหาตำแหน่ง
which(is.na(x)) คืนค่า ดัชนี (ตำแหน่ง) ของค่าหายไปในเวกเตอร์ ซึ่งจำเป็นสำหรับตรวจสอบว่าข้อมูลรายการใดหายไป และสำหรับการเติมค่าทดแทนแบบเจาะจง
temperatures <- c(22.1, NA, 19.8, NA, 25.1, NA, 17.3, 20.0)
cat('Temperatures:', temperatures, '
')
missing_pos <- which(is.na(temperatures))
cat('Missing at positions:', missing_pos, '
')
cat('Number missing:', length(missing_pos), '
')
# What values are NOT missing?
present_pos <- which(!is.na(temperatures))
cat('Present at positions:', present_pos, '
')การนับ NA ในกรอบข้อมูล
สำหรับกรอบข้อมูล is.na(df) จะคืนค่าเมทริกซ์ตรรกะที่มีมิติเท่ากัน การใช้ร่วมกับ colSums() จะให้จำนวนค่าหายไปในแต่ละคอลัมน์ ซึ่งเป็นวิธีตรวจสอบคุณภาพข้อมูลได้อย่างรวดเร็ว
# Simulate a small data frame
name_col <- c('Alice', 'Bob', 'Carol', 'Dave', 'Eve')
age_col <- c(28, NA, 32, NA, 29)
sal_col <- c(55000, 72000, NA, 90000, 61000)
scr_col <- c(88, NA, 75, NA, NA)
cat('Age NAs: ', sum(is.na(age_col)), '
')
cat('Salary NAs:', sum(is.na(sal_col)), '
')
cat('Score NAs: ', sum(is.na(scr_col)), '
')รูปแบบ colSums(is.na(df))
รูปแบบ colSums(is.na(df)) เป็นวิธีที่รวดเร็วที่สุดในการนับค่าหายไปในแต่ละคอลัมน์ของกรอบข้อมูล โดยคืนค่าเป็นเวกเตอร์ตัวเลขที่มีชื่อ ซึ่งแสดงจำนวน NA ในแต่ละคอลัมน์
# Build a data frame manually
df <- data.frame(
name = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
age = c(28, NA, 32, NA, 29),
salary = c(55000, 72000, NA, 90000, 61000),
score = c(88, NA, 75, NA, NA)
)
cat('Missing values per column:
')
print(colSums(is.na(df)))
cat('Total missing:', sum(is.na(df)), '
')สัดส่วน NA ในแต่ละคอลัมน์
การหารด้วยจำนวนแถวจะให้ สัดส่วนของค่าหายไปในแต่ละคอลัมน์ ซึ่งให้ข้อมูลมากกว่าจำนวนดิบเมื่อคอลัมน์มีความยาวต่างกัน
df <- data.frame(
x1 = c(1, NA, 3, NA, 5),
x2 = c(NA, 2, NA, 4, NA),
x3 = c(1, 2, 3, NA, 5)
)
n_rows <- nrow(df)
na_counts <- colSums(is.na(df))
na_pct <- round(na_counts / n_rows * 100, 1)
cat('NA counts: '); print(na_counts)
cat('NA percentage: '); print(na_pct)table(is.na()) — การนับความถี่
table(is.na(x)) สร้างตารางความถี่ที่มีชื่อ โดยแสดงจำนวนค่า FALSE (มีข้อมูล) และ TRUE (หายไป) วิธีนี้อ่านและทำความเข้าใจได้ง่ายในทันที
responses <- c(5, NA, 8, 6, NA, 9, 7, NA, NA, 8)
cat('NA frequency table:
')
print(table(is.na(responses)))
# For multiple columns:
cat('Age table:
')
ages <- c(28, NA, 32, NA, 29)
print(table(is.na(ages)))การค้นหาแถวที่มี NA อย่างน้อยหนึ่งค่า
หากต้องการค้นหาว่าแถวใดในกรอบข้อมูลมีค่าหายไปอย่างน้อยหนึ่งค่า ให้ใช้ apply(is.na(df), 1, any) ผลลัพธ์คือเวกเตอร์ตรรกะที่มีค่า TRUE สำหรับแถวที่มีข้อมูลไม่ครบ
df <- data.frame(
id = 1:5,
age = c(28, NA, 32, NA, 29),
salary = c(55000, 72000, NA, 90000, 61000)
)
# Which rows have at least one NA?
has_na <- apply(is.na(df), 1, any)
cat('Rows with any NA:', which(has_na), '
')
cat('Complete rows: ', which(!has_na), '
')
cat('Complete row count:', sum(!has_na), '/', nrow(df), '
')การตรวจสอบชุดข้อมูลที่สมบูรณ์
กระบวนการตรวจสอบ NA ที่ใช้ได้จริงคือ นับ ค้นหาตำแหน่ง และรายงานค่าหายไป เพื่อทำความเข้าใจคุณภาพข้อมูลก่อนการวิเคราะห์ ต่อไปนี้คือฟังก์ชันตรวจสอบแบบครบถ้วนในตัวเอง
audit_na <- function(v, label) {
n_total <- length(v)
n_missing <- sum(is.na(v))
pct <- round(n_missing / n_total * 100, 1)
positions <- which(is.na(v))
cat(label, ':', n_missing, '/', n_total,
'(', pct, '%) NA at positions', positions, '
')
}
heights <- c(175, NA, 162, 188, NA, 170)
weights <- c(70, 85, NA, 92, 68, NA)
audit_na(heights, 'Height')
audit_na(weights, 'Weight')สรุปการตรวจหา NA
ข้อมูลอ้างอิงอย่างรวดเร็วสำหรับเครื่องมือตรวจหา NA:
is.na(x)— เวกเตอร์ตรรกะ: เป็น TRUE เมื่อเป็น NAanyNA(x)— ค่า TRUE/FALSE เดียว: มี NA อยู่หรือไม่sum(is.na(x))— จำนวน NAmean(is.na(x))— สัดส่วนของ NAwhich(is.na(x))— ตำแหน่งของ NAcolSums(is.na(df))— จำนวน NA ในแต่ละคอลัมน์table(is.na(x))— ตารางความถี่ของค่า NA และค่าที่ไม่ใช่ NA
x <- c(10, NA, 30, NA, 50, NA, 70)
cat('is.na: ', is.na(x), '
')
cat('anyNA: ', anyNA(x), '
')
cat('sum(is.na): ', sum(is.na(x)), '
')
cat('mean(is.na): ', mean(is.na(x)), '
')
cat('which(is.na):', which(is.na(x)), '
')ตรวจสอบอย่างรวดเร็ว
sum(is.na(c(1, NA, 3, NA, 5))) คืนค่าอะไร?
ทบทวน: การตรวจหาและนับ NA
ทำได้ดีมากครับ/ค่ะ! ประเด็นสำคัญจากบทเรียนนี้มีดังนี้:
is.na(x)เป็นเครื่องมือหลัก — คืนค่าเวกเตอร์ตรรกะsum(is.na(x))นับค่าหายไป ส่วนmean(is.na(x))ให้สัดส่วนanyNA(x)ใช้ตรวจสอบอย่างรวดเร็วว่ามี NA อยู่หรือไม่which(is.na(x))แสดงตำแหน่งที่แน่นอนของ NAcolSums(is.na(df))เป็นวิธีมาตรฐานสำหรับตรวจสอบกรอบข้อมูล- อย่าใช้
x == NAเพื่อตรวจหา NA — ให้ใช้is.na(x)เสมอ
# Full audit of a data frame in 3 lines
df <- data.frame(a=c(1,NA,3), b=c(NA,2,NA), c=c(1,2,3))
cat('Per column:', colSums(is.na(df)), '
')
cat('Total: ', sum(is.na(df)), '/', nrow(df)*ncol(df), '
')
cat('Complete rows:', sum(complete.cases(df)), '/', nrow(df), '
')คำถามที่พบบ่อย
บทเรียน “การตรวจหาและนับค่าที่หายไป” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจหาและนับค่าที่หายไป” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจหาและนับค่าที่หายไป”
ใช้ is.na(), anyNA() และ sum(is.na()) เพื่อตรวจสอบข้อมูลที่หายไป คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจหาและนับค่าที่หายไป” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทำความเข้าใจ NA ใน R
- การตรวจหาและนับค่าที่หายไป
- การนำค่า NA ออกและแทนที่ค่า NA
- NA ในการคำนวณและการรวมค่า