Tidy Data Patterns
Tidy Rows
Filter One Measurement Type
A tidy table keeps one observation per row and records the measurement name in a column.
Program
Play the script to choose a measurement type, filter matching rows, and average their values.
tidy_rows.R
Replay: real traced execution (multi-file project)
measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))
metric_index <- 1
metric <- c("temp", "rain")[metric_index]
selected <- measurements[measurements$metric == metric, ]
average <- mean(selected$value)
cat(average, "\n", sep = "")
measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))
metric_index <- 2
metric <- c("temp", "rain")[metric_index]
selected <- measurements[measurements$metric == metric, ]
average <- mean(selected$value)
cat(average, "\n", sep = "")
measurements ← 4 rows x 3 cols
1measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))2metric_index <- 1values this step4 rows x 3 colsmeasurementsmetric_index ← 1
1measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))2metric_index <- 13metric <- c("temp", "rain")[metric_index]values this step1metric_indexmetric ← temp
2metric_index <- 13metric <- c("temp", "rain")[metric_index]4selected <- measurements[measurements$metric == metric, ]values this steptempmetric1metric_indexselected ← 2 rows x 3 cols
3metric <- c("temp", "rain")[metric_index]4selected <- measurements[measurements$metric == metric, ]5average <- mean(selected$value)values this step2 rows x 3 colsselectedtempmetricaverage ← 19.5
4selected <- measurements[measurements$metric == metric, ]5average <- mean(selected$value)6cat(average, "\n", sep = "")values this step19.5average18, 21selected$valuecat(average, " ", sep = "")
5average <- mean(selected$value)6cat(average, "\n", sep = "")output19.5values this step19.5average
measurements ← 4 rows x 3 cols
1measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))2metric_index <- 2values this step4 rows x 3 colsmeasurementsmetric_index ← 2
1measurements <- data.frame(site = c("north", "north", "south", "south"), metric = c("temp", "rain", "temp", "rain"), value = c(18, 4, 21, 6))2metric_index <- 23metric <- c("temp", "rain")[metric_index]values this step2metric_indexmetric ← rain
2metric_index <- 23metric <- c("temp", "rain")[metric_index]4selected <- measurements[measurements$metric == metric, ]values this steprainmetric2metric_indexselected ← 2 rows x 3 cols
3metric <- c("temp", "rain")[metric_index]4selected <- measurements[measurements$metric == metric, ]5average <- mean(selected$value)values this step2 rows x 3 colsselectedrainmetricaverage ← 5
4selected <- measurements[measurements$metric == metric, ]5average <- mean(selected$value)6cat(average, "\n", sep = "")values this step5average4, 6selected$valuecat(average, " ", sep = "")
5average <- mean(selected$value)6cat(average, "\n", sep = "")output5values this step5average
tidy rows
Each row is one observation: a site, a metric name, and a value.
filter
`measurements$metric == metric` keeps rows for the chosen measurement.
summary
`mean(selected$value)` summarizes only the filtered rows.