系列: R
r
207 行
· 更新于 2026-02-03
01-data-manipulation.R
R/intermediate/01-data-manipulation.R
# Data Manipulation with dplyr
# This script demonstrates data manipulation using the dplyr package
# ============================================================
# LOAD PACKAGE
# ============================================================
library(dplyr)
# ============================================================
# THE FIVE KEY VERBS
# ============================================================
# 1. filter() - keep rows that match conditions
# 2. select() - pick variables (columns)
# 3. mutate() - create new variables
# 4. arrange() - sort rows
# 5. summarize() - collapse to summary statistics
# ============================================================
# FILTER ROWS WITH filter()
# ============================================================
# Load built-in dataset
data("mtcars")
# Filter cars with mpg greater than 20
mtcars %>%
filter(mpg > 20)
# Multiple conditions
mtcars %>%
filter(mpg > 20, cyl == 4)
# Using 'or' operator
mtcars %>%
filter(mpg > 30 | hp < 100)
# ============================================================
# SELECT COLUMNS WITH select()
# ============================================================
# Select specific columns
mtcars %>%
select(mpg, hp, wt)
# Select a range of columns
mtcars %>%
select(mpg:wt)
# Select columns to exclude
mtcars %>%
select(-mpg, -hp)
# Select columns by name pattern
mtcars %>%
select(starts_with("m"))
# ============================================================
# CREATE VARIABLES WITH mutate()
# ============================================================
mtcars %>%
mutate(
hp_per_cyl = hp / cyl,
weight_kg = wt * 453.592
) %>%
head()
# Use ifelse() in mutate
mtcars %>%
mutate(
fuel_category = ifelse(mpg > 20, "Efficient", "Less Efficient")
) %>%
select(mpg, fuel_category)
# ============================================================
# ARRANGE ROWS WITH arrange()
# ============================================================
# Sort by mpg (ascending)
mtcars %>%
arrange(mpg) %>%
head()
# Sort by mpg (descending)
mtcars %>%
arrange(desc(mpg)) %>%
head()
# Sort by multiple columns
mtcars %>%
arrange(desc(mpg), desc(hp)) %>%
head()
# ============================================================
# SUMMARIZE DATA WITH summarize()
# ============================================================
mtcars %>%
summarize(
mean_mpg = mean(mpg),
median_mpg = median(mpg),
max_hp = max(hp),
count = n()
)
# ============================================================
# GROUP OPERATIONS WITH group_by()
# ============================================================
mtcars %>%
group_by(cyl) %>%
summarize(
mean_mpg = mean(mpg),
count = n()
)
# ============================================================
# THE PIPE OPERATOR %>%
# ============================================================
# Without pipe (nested functions)
arrange(filter(mtcars, mpg > 20), desc(hp))
# With pipe (readable!)
mtcars %>%
filter(mpg > 20) %>%
arrange(desc(hp))
# Complex operation
mtcars %>%
filter(mpg > 20) %>%
select(mpg, hp, wt) %>%
mutate(hp_per_weight = hp / wt) %>%
arrange(desc(hp_per_weight)) %>%
head()
# ============================================================
# COMBINING MULTIPLE OPERATIONS
# ============================================================
result <- mtcars %>%
filter(cyl == 4 | cyl == 6) %>%
select(mpg, hp, cyl) %>%
mutate(
efficient = mpg > 22,
powerful = hp > 100
) %>%
arrange(desc(mpg))
head(result)
# ============================================================
# ADDITIONAL USEFUL FUNCTIONS
# ============================================================
# distinct() - get unique values
mtcars %>%
distinct(cyl)
# rename() - rename columns
mtcars %>%
rename(horsepower = hp) %>%
head()
# slice() - select rows by position
mtcars %>%
slice(1:5)
mtcars %>%
slice_max(mpg, n = 5)
mtcars %>%
slice_min(mpg, n = 5)
# ============================================================
# PRACTICE EXERCISE
# ============================================================
# Exercise: From mtcars data
# 1. Filter cars with 4 or 6 cylinders
# 2. Select mpg, cyl, hp, wt
# 3. Create a variable: hp_per_weight
# 4. Find cars with hp_per_weight > 50
# 5. Arrange by hp_per_weight descending
# Your solution here:
exercise_result <- mtcars %>%
filter(cyl == 4 | cyl == 6) %>%
select(mpg, cyl, hp, wt) %>%
mutate(hp_per_weight = hp / wt) %>%
filter(hp_per_weight > 50) %>%
arrange(desc(hp_per_weight))
head(exercise_result)
# ============================================================
# SUMMARY
# ============================================================
# You learned:
# - How to filter rows with filter()
# - How to select columns with select()
# - How to create new variables with mutate()
# - How to sort with arrange()
# - How to summarize with summarize()
# - How to group operations with group_by()
# - How to chain operations with %>%
相关文章
R
r
更新于 2026-02-03
Fractional_Logit.r
Fractional_Logit.r — r source code from the R learning materials (R/Fractional_Logit.r).
阅读文章 →
R
r
更新于 2026-02-03
Fractional_Logit_PCA.r
Fractional_Logit_PCA.r — r source code from the R learning materials (R/Fractional_Logit_PCA.r).
阅读文章 →
R
r
更新于 2026-02-03
01-probability-distributions.R
01-probability-distributions.R — r source code from the R learning materials (R/advanced/01-probability-distributions.R).
阅读文章 →
R
r
更新于 2026-02-03
02-hypothesis-testing.R
02-hypothesis-testing.R — r source code from the R learning materials (R/advanced/02-hypothesis-testing.R).
阅读文章 →
R
r
更新于 2026-02-03
03-linear-regression.R
03-linear-regression.R — r source code from the R learning materials (R/advanced/03-linear-regression.R).
阅读文章 →
R
r
更新于 2026-02-03
04-advanced-anova.R
04-advanced-anova.R — r source code from the R learning materials (R/advanced/04-advanced-anova.R).
阅读文章 →