Data Frames & Tibbles

A data frame is a list of equal-length vectors (columns) — R's table.

13.1 Data frames

A data frame is a list of equal-length vectors (columns) — R's table.

df <- data.frame(
  name = c("Ann", "Bob", "Cara"),
  age = c(30, 25, 35),
  city = c("Oslo", "Rome", "Oslo")
)
str(df); summary(df); head(df); nrow(df); ncol(df); dim(df); names(df)

df$age                  # a column (vector)
df[["age"]]
df[2, ]                 # second row
df[, c("name", "age")]  # columns by name
df[df$age > 26, ]       # filter rows
subset(df, age > 26, select = c(name, city))
df[order(-df$age), ]    # sort descending by age
df$senior <- df$age > 30          # add column
df$senior <- NULL                 # remove column
df <- transform(df, age_months = age * 12)
with(df, mean(age))
rbind(df, data.frame(name = "Dan", age = 40, city = "Lima", age_months = 480))
merge(df, data.frame(city = c("Oslo", "Rome"), country = c("NO", "IT")), by = "city")
aggregate(age ~ city, data = df, FUN = mean)
split(df, df$city)
unique(df$city); table(df$city)

13.2 Built-in datasets

data()                  # list available datasets
head(mtcars); head(iris); head(airquality); head(ToothGrowth)
library(palmerpenguins); head(penguins)

13.3 Tibbles (tidyverse data frames)

Tibbles print nicely (first 10 rows, column types), never convert strings to factors, never partially match column names, and [ always returns a tibble.

library(tibble)
tb <- tibble(x = 1:3, y = x * 2, `odd name` = c("a", "b", "c"))
as_tibble(mtcars, rownames = "car")
tribble(
  ~name, ~score,
  "Ann", 90,
  "Bob", 85
)

13.4 Inspecting data

glimpse(df)                 # dplyr: transposed overview
skimr::skim(df)             # rich summary
View(df)                    # spreadsheet viewer in RStudio
dplyr::count(df, city, sort = TRUE)