r 重命名 列名_【R语言新书】2.5 数据操作

本文详细介绍了如何使用R语言的dplyr包进行数据操作,包括选择列(选择、重命名、调整顺序)、筛选行、排序、修改列以及分组汇总等步骤。通过实例展示了dplyr提供的函数如select、rename、filter、arrange、mutate等,以及如何结合使用这些函数进行复杂的数据操作。
摘要由CSDN通过智能技术生成

f96c4571e8d94df1592aedf9b2771d84.png
张敬信:《R语言编程—基于tidyverse》新书信息汇总​zhuanlan.zhihu.com
08876530bc520b1bad2840dd3d2c52cc.png

用 dplyr 包实现各种数据操作,通常的数据操作无论多么复杂,往往都可以分解为若干基本数据操作步骤的组合。

共有 5 种基本数据操作:

  • select()——选择列
  • filter()/slice()——筛选行
  • arrange()—— 对行排序
  • mutate()——修改列/创建新列
  • summarize()——汇总

这些函数都可以与

  • group_by()——分组

连用,以改变数据操作的作用域:作用在整个数据框,或数据框的每个分组。

这些函数组合使用就足以完成各种数据操作,它们的相同之处是:

  • 第 1 个参数是数据框,方便管道操作
  • 根据列名访问数据框的列,且列名不用加引号
  • 返回结果是一个新数据框,不改变原数据框

从而,可以方便地实现:"将多个简单操作,依次用管道连接,实现复杂的数据操

"。

另外,若要同时对所选择的多列应用函数,还有强大的 across() 函数,它支持各种选择列语法,搭配 mutate()summarise() 使用,产生非常强大同时修改/汇总多列的效果。

2.5.1 选择列

选择列,包括对数据框做选择列、调整列序、重命名列。

下面以虚拟的学生成绩数据来演示,包含随机生成的 20 个 NA

df = read_xlsx("datas/ExamDatas_NAs.xlsx")
df

1d735bda9f616796790699914c16fa3f.png

1. 选择列语法

(1) 用列名或索引选择列

df %>%
  select(name, sex, math) # 或者select(2, 3, 5)

f6c23dd572a90b74d6306b31299e0bb5.png

(2) 借助运算符选择列

  • : 选择连续的若干列
  • ! 选择变量集合的余集(反选)
  • &| 选择变量集合的交或并
  • c() 合并多个选择

(3) 借助选择助手函数

选择指定列:

  • everything(): 选择所有列
  • last_col(): 选择最后一列,可以带参数,如 last_col(5) 选择倒数第 6 列

选择列名匹配的列:

  • starts_with(): 以某前缀开头的列名
  • ends_with(): 以某后缀结尾的列名
  • contains(): 包含某字符串的列名
  • matches(): 匹配正则表达式的列名
  • num_range(): 匹配数值范围的列名,如 num_range("x", 1:3) 匹配 x1, x2, x3

结合函数选择列:

  • where(): 应用一个函数到所有列,选择返回结果为 TRUE 的列,比如与 is.numeric 等函数连用

2. 一些选择列的示例

df %>%
  select(starts_with("m"))

6b65e07a4d8cdee750f68d84fbff64f7.png
df %>%
  select(ends_with("e"))

950d430207f31a0fa6becff508b46a9b.png
df %>%
  select(contains("a"))

3846428bb778379b73a018aaac95dd4d.png
  • 根据正则表达式匹配选择列:
df %>%
  select(matches("m.*a"))

fd50d8963b3917612191838d4de26d63.png

1603970f352fee791874e5b0fcf21bdd.png
  • 根据条件(逻辑判断)选择列,例如选择所有数值型的列:
df %>%
  select(where(is.numeric))

efa5150c934eec21bb33c1e286ee1a79.png

也可以自定义返回 TUREFALSE 的判断函数,支持 purrr 风格公式写法。例如,选择列和 > 3000 的列:

df[, 4:8] %>%
  select(where(~ sum(.x, na.rm = TRUE) > 3000))

a32fc91cffdbcd3854912102bc5c19d7.png

再比如,结合 n_distinct() 选择唯一值数目 < 10 的列:

df %>%
  select(where(~ n_distinct(.x) < 10))

0c5890808dbc8e2994edbf1f9bababdc.png

e469abc556c6cdc71647b862b39db774.png

3. 用 - 删除列

df %>%
  select(-c(name, chinese, science)) # 或者select(-ends_with("e"))

dd0ca429710c826b4f68377aeab0e1e4.png
df %>%
  select(math, everything(), -ends_with("e"))

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值