跳转到主要内容
模块 4 · 第 1 课(共 2)课程中的7/10~12 min
模块课程(1/2)

过滤和选择数据

Tidyverse 是专为数据科学设计的 R 包的集合,它们具有共同的哲学、语法和数据结构。该套件中用于数据操作的核心包称为 dplyr。

dplyr 引入了一组函数(“动词”),使数据框操作变得非常直观。


管道运算符(%>% 或 |>)

Tidyverse 理念的核心是将操作链接在一起。管道运算符 %>% (或 R 4.1+ 中引入的本机管道 |>)获取一个表达式的结果并将其作为第一个参数传递给下一个函数。这可以避免嵌套函数调用,并防止临时变量使工作区变得混乱。

R
# Without pipe:
filter(select(df, name, age), age > 20)

# With pipe:
df %>%
  select(name, age) %>%
  filter(age > 20)

用于过滤和选择的 dplyr 动词

从数据框中提取数据的三个基本动词是:

1.select()

从数据框中选择特定列。您可以列出要保留的列名称或使用 - 前缀来排除列。

R
# Select the 'name' and 'salary' columns
select(df, name, salary)

# Remove the 'address' column
select(df, -address)

2.filter()

根据一个或多个逻辑条件过滤行。

R
# Filter rows where age is greater than 30
filter(df, age > 30)

# Filter using multiple conditions (logical AND)
filter(df, age > 30, department == "HR")

3.arrange()

根据一列或多列的值对行进行排序。默认情况下排序顺序为升序。要按降序排序,请将列名括在 desc() 中。

R
# Sort by age (ascending)
arrange(df, age)

# Sort by salary (descending)
arrange(df, desc(salary))

自己尝试一下

练习 1:选择列

锻炼#r.m4.l1.e1
尝试:0加载中...

给定数据框 df,使用 select() 选择姓名和年龄列并将结果保存在 df_selected 中。

正在加载编辑器...
显示提示

美国:df_selected <- select(df, 姓名, 年龄)

3 次尝试后可用的解决方案

锻炼#r.m4.l1.e2
尝试:0加载中...

过滤数据框 df 中年龄列严格大于 18 的行,将结果保存在 df_adults 中。

正在加载编辑器...
显示提示

使用filter(df,age > 18)函数并将结果分配给df_adults。

3 次尝试后可用的解决方案

锻炼#r.m4.l1.e3
尝试:0加载中...

使用管道运算符 %>% 来链接操作:首先过滤 df 只保留age > 18 的记录,然后选择 name 列。将结果保存到 res.

正在加载编辑器...
显示提示

Scrivi: res <- df %>% 过滤器(年龄 > 18) %>% 选择(姓名)

3 次尝试后可用的解决方案

锻炼#r.m4.l1.e4
尝试:0加载中...

使用排列() 和 desc() 根据工资列按降序对数据框 df 的行进行排序。将结果保存在 df_sorted 中。

正在加载编辑器...
显示提示

美国安排(desc(薪水))所有内部的管道都直接进入。

3 次尝试后可用的解决方案

锻炼#r.m4.l1.e5
尝试:0加载中...

在df上写一个完整的管道:过滤department等于'IT'的记录,选择列name和salary,并按salary(升序)对结果进行排序。将最终结果保存到 res 中。

正在加载编辑器...
显示提示

使用管道%>% 来链接filter(department == 'IT')、select(name, salary) 和arrange(salary)。

3 次尝试后可用的解决方案