0Pricing
R Academy · บทเรียน

NA ในการคำนวณและการรวมค่า

ควบคุมพฤติกรรมของ NA ใน mean(), sum() และฟังก์ชันรวมค่าอื่น ๆ

NA ในการคำนวณและการรวมค่า เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

พารามิเตอร์ na.rm

ฟังก์ชันรวมค่าของ R ส่วนใหญ่รับอาร์กิวเมนต์ na.rm (ลบ NA) เมื่อกำหนดเป็น TRUE ฟังก์ชันจะ ไม่สนใจค่า NA ก่อนคำนวณผลลัพธ์ โดยค่าเริ่มต้น na.rm = FALSE ดังนั้น NA จึงถูกส่งต่อไปยังผลลัพธ์

scores <- c(88, NA, 72, 95, NA, 81, 67)
cat('With na.rm=FALSE (default):
')
cat('  mean:', mean(scores), '
')           # NA
cat('  sum: ', sum(scores), '
')            # NA
cat('With na.rm=TRUE:
')
cat('  mean:', mean(scores, na.rm = TRUE), '
')  # 80.6
cat('  sum: ', sum(scores, na.rm = TRUE), '
')   # 403

mean() ร่วมกับ na.rm

mean(x, na.rm = TRUE) คำนวณค่าเฉลี่ยเลขคณิตของค่าที่ ไม่หายไป ตัวหารคือจำนวนค่าที่มีข้อมูล ไม่ใช่ความยาวทั้งหมด

temperatures <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)

cat('Total elements:', length(temperatures), '
')
cat('Present elements:', sum(!is.na(temperatures)), '
')
cat('Mean (na.rm=TRUE):', mean(temperatures, na.rm = TRUE), '
')

# Manual verification
cat('Manual mean:', sum(temperatures, na.rm=TRUE) / sum(!is.na(temperatures)), '
')

sum() ร่วมกับ na.rm

sum(x, na.rm = TRUE) จะบวกเฉพาะค่าที่ไม่ใช่ NA วิธีนี้จำเป็นสำหรับการนับค่า TRUE ในเวกเตอร์ตรรกะที่อาจมี NA หรือการคำนวณผลรวมจากข้อมูลที่ไม่ครบ

sales_daily <- c(1200, NA, 980, 1450, NA, 1100, 890)
cat('Sum (default):', sum(sales_daily), '
')            # NA
cat('Sum (na.rm):  ', sum(sales_daily, na.rm = TRUE), '
')  # 5620

# Count observations meeting a condition (NA-safe)
cat('Days over 1000:', sum(sales_daily > 1000, na.rm = TRUE), '
')

min() และ max() ร่วมกับ na.rm

min() และ max() มีพารามิเตอร์ na.rm เช่นกัน หากไม่ใช้พารามิเตอร์นี้ การมี NA เพียงค่าเดียวในข้อมูลนำเข้าจะทำให้ฟังก์ชันคืนค่าเป็น NA แต่เมื่อใช้ na.rm = TRUE จะคืนค่าต่ำสุดหรือสูงสุดของค่าที่มีข้อมูล

blood_pressure <- c(120, NA, 135, 118, NA, 142, 125, NA, 130)
cat('Max BP (default):', max(blood_pressure), '
')              # NA
cat('Max BP (na.rm):  ', max(blood_pressure, na.rm = TRUE), '
')  # 142
cat('Min BP (na.rm):  ', min(blood_pressure, na.rm = TRUE), '
')  # 118
cat('Range (na.rm):   ', range(blood_pressure, na.rm = TRUE), '
')

var() และ sd() ร่วมกับ na.rm

ความแปรปรวน (var()) และส่วนเบี่ยงเบนมาตรฐาน (sd()) รองรับ na.rm เช่นกัน โดยจะคำนวณสถิติโดยใช้เฉพาะข้อมูลสังเกตที่ไม่หายไป และปรับองศาอิสระโดยอัตโนมัติ

exam_scores <- c(78, 85, NA, 92, 68, 75, NA, 88, 91, NA)
n_valid <- sum(!is.na(exam_scores))
cat('Valid observations:', n_valid, '
')
cat('Mean:   ', round(mean(exam_scores, na.rm = TRUE), 2), '
')
cat('SD:     ', round(sd(exam_scores, na.rm = TRUE), 2), '
')
cat('Var:    ', round(var(exam_scores, na.rm = TRUE), 2), '
')

median() และ quantile() ร่วมกับ na.rm

median() และ quantile() มักทนต่อค่าผิดปกติได้ดีกว่าค่าเฉลี่ย แต่ก็ยังต้องใช้ na.rm = TRUE เพื่อจัดการค่าหายไปอย่างถูกต้อง

incomes <- c(45000, NA, 52000, 48000, NA, 210000, 51000, NA, 49000)
cat('Observations:', sum(!is.na(incomes)), '
')
cat('Median income:', median(incomes, na.rm = TRUE), '
')
cat('Mean income:  ', mean(incomes, na.rm = TRUE), '
')  # pulled up by 210000
cat('25th pctile:  ', quantile(incomes, 0.25, na.rm = TRUE), '
')
cat('75th pctile:  ', quantile(incomes, 0.75, na.rm = TRUE), '
')

prod() และ cumsum() ร่วมกับ na.rm

prod(x, na.rm = TRUE) คำนวณผลคูณของค่าที่ไม่ใช่ NA ฟังก์ชันสะสม เช่น cumsum() ไม่มี na.rm — NA จะแพร่กระจายตั้งแต่ค่าที่หายไปตัวแรกเป็นต้นไป

growth_rates <- c(1.05, NA, 1.03, 1.08, NA, 1.02)
cat('Product of rates:', prod(growth_rates, na.rm = TRUE), '
')

# cumsum propagates NAs
values <- c(10, 20, NA, 40, 50)
cat('cumsum (with NA):', cumsum(values), '
')

# Workaround: replace NA first
filled <- replace(values, is.na(values), 0)
cat('cumsum (NA=0):   ', cumsum(filled), '
')

na.rm ในฟังก์ชัน apply

เมื่อใช้ apply() กับแถวหรือคอลัมน์ของเมทริกซ์ คุณสามารถส่ง na.rm = TRUE ไปยังฟังก์ชันผ่าน ... ได้ วิธีนี้จะคำนวณค่ารวมโดยไม่สนใจ NA

m <- matrix(c(88,NA,72, 95,81,NA, 67,75,90), nrow = 3)
cat('Matrix:
'); print(m)

# Row means ignoring NAs
cat('Row means (na.rm=TRUE):', apply(m, 1, mean, na.rm = TRUE), '
')

# Col means ignoring NAs
cat('Col means (na.rm=TRUE):', apply(m, 2, mean, na.rm = TRUE), '
')

rowSums() / colSums() ร่วมกับ na.rm

rowSums() และ colSums() มีพารามิเตอร์ na.rm ของตนเอง (ไม่ได้ส่งผ่าน ...) การใช้ na.rm = TRUE ทำให้ฟังก์ชันมองว่า NA มีค่าเป็น 0 ในการหาผลรวม

sales <- matrix(c(100,NA,80, NA,90,70, 110,85,NA), nrow = 3)
cat('Sales matrix:
'); print(sales)

cat('Row sums (na.rm=F):', rowSums(sales), '
')             # NAs propagate
cat('Row sums (na.rm=T):', rowSums(sales, na.rm = TRUE), '
')
cat('Col means (na.rm=T):', colMeans(sales, na.rm = TRUE), '
')

การเปรียบเทียบ: na.rm=FALSE กับ TRUE

การทำความเข้าใจว่าเมื่อใดควรใช้ na.rm = TRUE แทน FALSE ขึ้นอยู่กับจุดประสงค์ของการวิเคราะห์: FALSE ช่วยให้คุณทราบว่าข้อมูลไม่สมบูรณ์ ส่วน TRUE จะคำนวณค่าสถิติประมาณการที่ดีที่สุดจากข้อมูลที่มีอยู่

# Always check: how much data is missing BEFORE using na.rm=TRUE
collected <- c(78, NA, 85, NA, 91, 74, NA, 88, 82, NA)
pct_missing <- mean(is.na(collected)) * 100
cat('Missing:', round(pct_missing, 1), '% of data
')

if (pct_missing < 20) {
  cat('Acceptable: computing mean with na.rm=TRUE
')
  cat('Mean:', round(mean(collected, na.rm = TRUE), 2), '
')
} else {
  cat('Too much missing data — investigate before computing
')
}

na.rm ในฟังก์ชันที่ผู้ใช้สร้าง

เมื่อเขียนฟังก์ชันรวมค่าของคุณเอง ให้เพิ่มพารามิเตอร์ na.rm และส่งต่อพารามิเตอร์นี้ไปยังฟังก์ชันพื้นฐานของ R วิธีนี้ทำให้ฟังก์ชันของคุณสอดคล้องกับแนวทางมาตรฐานของ R

# Custom function with na.rm support
cv <- function(x, na.rm = FALSE) {
  # Coefficient of Variation = SD / mean
  s <- sd(x, na.rm = na.rm)
  m <- mean(x, na.rm = na.rm)
  return(s / m)
}

readings <- c(22.1, NA, 19.8, 25.1, NA, 17.3, 20.0)
cat('CV (na.rm=FALSE):', cv(readings), '
')          # NA
cat('CV (na.rm=TRUE): ', round(cv(readings, na.rm = TRUE), 4), '
')

ตรวจสอบอย่างรวดเร็ว

mean(c(10, 20, NA, 40), na.rm = TRUE) คืนค่าอะไร

ทบทวน: NA ในการคำนวณ

ยอดเยี่ยมครับ/ค่ะ! ประเด็นสำคัญจากบทเรียนนี้มีดังนี้:

  • ฟังก์ชันรวมค่าส่วนใหญ่ (mean, sum, min, max, sd และอื่น ๆ) มีพารามิเตอร์ na.rm
  • na.rm = FALSE (ค่าเริ่มต้น) หมายความว่า NA จะส่งต่อไปยังผลลัพธ์ — หากมีค่าใดเป็น NA ผลลัพธ์จะเป็น NA
  • na.rm = TRUE จะละเว้นค่า NA และคำนวณค่าสถิติจากค่าที่มีอยู่เท่านั้น
  • ตัวหารของ mean(na.rm=TRUE) คือจำนวนค่าที่ไม่ใช่ NA ไม่ใช่ความยาวทั้งหมด
  • ตรวจสอบสัดส่วนของข้อมูลที่หายไปเสมอ ก่อนคำนวณค่าสถิติด้วย na.rm=TRUE
  • เพิ่ม na.rm ในฟังก์ชันรวมค่าของคุณเอง เพื่อให้เป็นไปตามแนวทางของ R
# Complete summary with na.rm
data_vec <- c(55, NA, 72, 88, NA, 61, 79, NA, 93, 68)
cat('N valid:', sum(!is.na(data_vec)), '
')
cat('Mean:  ', round(mean(data_vec, na.rm=TRUE), 2), '
')
cat('Median:', median(data_vec, na.rm=TRUE), '
')
cat('SD:    ', round(sd(data_vec, na.rm=TRUE), 2), '
')
cat('Min:   ', min(data_vec, na.rm=TRUE), '
')
cat('Max:   ', max(data_vec, na.rm=TRUE), '
')

คำถามที่พบบ่อย

บทเรียน “NA ในการคำนวณและการรวมค่า” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “NA ในการคำนวณและการรวมค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “NA ในการคำนวณและการรวมค่า”

ควบคุมพฤติกรรมของ NA ใน mean(), sum() และฟังก์ชันรวมค่าอื่น ๆ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “NA ในการคำนวณและการรวมค่า” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจ NA ใน R
  2. การตรวจหาและนับค่าที่หายไป
  3. การนำค่า NA ออกและแทนที่ค่า NA
  4. NA ในการคำนวณและการรวมค่า
← กลับไปที่ R Academy