Diagnostics and Quality Checks
Missing Rate
Count Empty Values
A data quality check should make missing values visible before analysis continues.
Program
Play the script to change the allowed number of missing values and see the quality status.
missing_rate.R
Replay: real traced execution (multi-file project)
allowed_missing <- 1
score <- c(91, NA, 88, NA, 76)
missing <- is.na(score)
missing_count <- sum(missing)
status <- if (missing_count <= allowed_missing) "ok" else "review"
label <- paste(status, missing_count, sep = ":")
cat(label, "\n", sep = "")
allowed_missing <- 0
score <- c(91, NA, 88, NA, 76)
missing <- is.na(score)
missing_count <- sum(missing)
status <- if (missing_count <= allowed_missing) "ok" else "review"
label <- paste(status, missing_count, sep = ":")
cat(label, "\n", sep = "")
allowed_missing <- 2
score <- c(91, NA, 88, NA, 76)
missing <- is.na(score)
missing_count <- sum(missing)
status <- if (missing_count <= allowed_missing) "ok" else "review"
label <- paste(status, missing_count, sep = ":")
cat(label, "\n", sep = "")
allowed_missing ← 1
1allowed_missing <- 12score <- c(91, NA, 88, NA, 76)values this step1allowed_missingscore ← 91, NA, 88, NA, 76
1allowed_missing <- 12score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)values this step91, NA, 88, NA, 76scoremissing ← FALSE, TRUE, FALSE, TRUE, FALSE
2score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)4missing_count <- sum(missing)values this stepFALSE, TRUE, FALSE, TRUE, FALSEmissing5 valuesscoremissing_count ← 2
3missing <- is.na(score)4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"values this step2missing_count2 missing valuesmissingstatus ← review
4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")values this stepreviewstatus2missing_count1allowed_missinglabel ← review:2
5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")values this stepreview:2labelreviewstatus2missing_countcat(label, " ", sep = "")
6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")outputreview:2values this stepreview:2label
allowed_missing ← 0
1allowed_missing <- 02score <- c(91, NA, 88, NA, 76)values this step0allowed_missingscore ← 91, NA, 88, NA, 76
1allowed_missing <- 02score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)values this step91, NA, 88, NA, 76scoremissing ← FALSE, TRUE, FALSE, TRUE, FALSE
2score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)4missing_count <- sum(missing)values this stepFALSE, TRUE, FALSE, TRUE, FALSEmissing5 valuesscoremissing_count ← 2
3missing <- is.na(score)4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"values this step2missing_count2 missing valuesmissingstatus ← review
4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")values this stepreviewstatus2missing_count0allowed_missinglabel ← review:2
5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")values this stepreview:2labelreviewstatus2missing_countcat(label, " ", sep = "")
6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")outputreview:2values this stepreview:2label
allowed_missing ← 2
1allowed_missing <- 22score <- c(91, NA, 88, NA, 76)values this step2allowed_missingscore ← 91, NA, 88, NA, 76
1allowed_missing <- 22score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)values this step91, NA, 88, NA, 76scoremissing ← FALSE, TRUE, FALSE, TRUE, FALSE
2score <- c(91, NA, 88, NA, 76)3missing <- is.na(score)4missing_count <- sum(missing)values this stepFALSE, TRUE, FALSE, TRUE, FALSEmissing5 valuesscoremissing_count ← 2
3missing <- is.na(score)4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"values this step2missing_count2 missing valuesmissingstatus ← ok
4missing_count <- sum(missing)5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")values this stepokstatus2missing_count2allowed_missinglabel ← ok:2
5status <- if (missing_count <= allowed_missing) "ok" else "review"6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")values this stepok:2labelokstatus2missing_countcat(label, " ", sep = "")
6label <- paste(status, missing_count, sep = ":")7cat(label, "\n", sep = "")outputok:2values this stepok:2label
missing marker
`NA` marks values that are not available.
diagnostic vector
`is.na(score)` checks each value independently.
quality gate
`allowed_missing` makes the pass/fail threshold explicit.