Working with your data in R
Everyday R commands for working with your data readings in R Studio.
Once zc_get_readings() (or zc_sync()) has given you a data frame of readings, here are the everyday R commands for looking at it, filtering it, summarising it, and saving it. You need very little R to be productive — this article covers the essentials, with links to fuller R guides at the end.
If you haven’t fetched any readings yet, start with Getting Started with zentraR.
Throughout, readings is the tidy data frame returned by zc_get_readings():
library(zentraR)
readings <- zc_get_readings("z6-00930", start = Sys.Date() - 7)Save results so you can reuse them
The single most useful habit in R: store a result in a named object with <-, or it prints once and is gone.
# Prints once, then lost:
zc_pivot_wider(readings)
# Saved as `wide` — now you can view it, filter it, plot it, or export it:
wide <- zc_pivot_wider(readings)
wideYou choose the name (wide, daily, air_temp, …). The <- is R’s assignment arrow: name on the left, value on the right.
Look at your data
readings # a tibble: prints the first 10 rows and the column types
View(readings) # open the RStudio spreadsheet viewer (capital V)
head(readings, 20) # first 20 rows; tail(readings) for the last few
str(readings) # structure: every column and its type
dplyr::glimpse(readings) # a tidy, transposed overview
summary(readings) # quick per-column statistics
dim(readings) # number of rows and columns; nrow() / ncol()
names(readings) # the column namesView() is interactive (RStudio only) — in a script or a scheduled job use print(), head(), or str() instead.
See what’s inside
readings$column pulls out a single column by name. Combine that with a few base functions to get your bearings:
unique(readings$measurement) # which measurements are present
table(readings$measurement) # how many readings of each
unique(readings$device_id) # which devices
range(readings$datetime) # earliest and latest timestampFilter and sort
The dplyr package (part of the tidyverse) reads almost like English:
library(dplyr)
# Keep only valid air-temperature readings:
readings |> filter(measurement == "Air Temperature", error_code == 0)
# Highest values first:
readings |> arrange(desc(value))The |> is R’s pipe: it feeds the value on its left into the function on its right. Base R does the same with square brackets, if you prefer:
readings[readings$measurement == "Air Temperature", ]Quick summaries
mean(readings$value, na.rm = TRUE) # na.rm = TRUE ignores missing values
# Average and count per measurement:
readings |>
group_by(measurement) |>
summarise(avg = mean(value, na.rm = TRUE), n = n())A quick plot
plot(readings$datetime, readings$value, type = "l")For publication-quality graphics with ggplot2, see the plotting example in Getting Started with zentraR.
Save and export
# CSV — opens in Excel / Google Sheets, easy to share:
write.csv(readings, "readings.csv", row.names = FALSE)
# RDS — an exact copy of the R object (types preserved); reload with readRDS():
saveRDS(readings, "readings.rds")
readings <- readRDS("readings.rds")For an automated, incremental local archive, use zentraR’s own stores (zc_store_csv(), zc_store_rds()) withzc_sync() — see Scheduling Automatic Syncs.
Getting help
?zc_get_readings # the help page for any function
vignette(package = "zentraR") # list this package's guidesLearn more R
These free resources cover R itself, well beyond what you need for zentraR:
- R for Data Science (2nd ed.) — the standard introduction to the tidyverse.
- Posit cheatsheets — one-page references for
dplyr,ggplot2, RStudio, and more. - RStudio beginner resources — guided starting points.
How did we do?
Scheduling Automatic Syncs