在r中rowsums_【R语言新书】2.5 数据操作

2e97dd3ca89187068613597589867620.png
张敬信:《R语言编程—基于tidyverse》新书信息汇总​zhuanlan.zhihu.com
9484d0bae5f3e3198687ee99911dc315.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

0e0bb3325862cd18bd50a7f2f858703f.png

1. 选择列语法

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

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

a4c9e8585bb1a6f6aa7c39edb5106ab4.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"))

067af25e177c3d32f026e5ee18b1e281.png
df %>%
  select(ends_with("e"))

bf53c9aa9ed7d7ed1fb665516c4a4d15.png
df %>%
  select(contains("a"))

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

e19096510837c758a3677c7fb7d08164.png

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

f272358ed62eae67f4cfc3fc3fbf437d.png

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

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

ab19cfa7258a14a42881ad5866e96a4e.png

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

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

4df718b6450372bfdc4a9e62b656fc48.png

da952b237e06c41613ef9239f97350d4.png

3. 用 - 删除列

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值