r语言合并相同列名的列_【R语言新书】2.4 数据重塑

本文介绍了R语言中数据重塑的概念,包括整洁数据的特点和不整洁数据的问题。详细讲解了宽表变长表、长表变宽表的操作,以及拆分列与合并列的方法,举例说明了tidyr包中的函数如何应用于数据转换。
摘要由CSDN通过智能技术生成

3864f7b087acc203beea3de42c02fa32.png
张敬信:《R语言编程—基于tidyverse》新书信息汇总​zhuanlan.zhihu.com
37e5d8f1077e6ba5fc162aaf4b345e1a.png

2.4.1 什么是整洁数据?

采用 Hadley 的表述,脏的 / 不整洁的数据往往具有如下特点:

  • 首行(列名)是值,不是变量名
  • 多个变量放在一列
  • 变量既放在行也放在列
  • 多种类型的观测单元在同一个单元格
  • 一个观测单元放在多个表

而整洁数据具有如下特点:

  • 每个 变量 构成一列
  • 每个 观测 构成一行
  • 每个观测的每个变量 构成一个单元格

6ec7767f1e2f1c20639d6e3cf1d428ff.png

tidyverse 系列包中的函数操作的都是这种整洁数据框,而不整洁数据,首先需要变成整洁数据,这就是 数据重塑

数据重塑主要包括长宽表转化、拆分 / 合并列。长宽表转化最初是 reshape2 包的 melt()cast() ; 后来又发展到早期 tidyr 包的 gather()spread() , 现在 tidyr 1.0 之后提供了更加易用的 pivot_longer()pivot_wider() .

先看一个不整洁数据与整洁数据对比的例子:

dt = tribble(
  ~observation, ~A_count, ~B_count, ~A_dbh, ~B_dbh,
  "Richmond(Sam)",  7,       2,        100,   110,
  "Windsor(Ash)",  10,       5,         80,    87,
  "Bilpin(Jules)",  5,       8,         95,    90
)
knitr::kable(dt, align="c")

113cd12045f9679edb7a6b81c2b9c7e4.png

该数据框不整洁,表现在:

  • observation 列有两个变量数据
  • 列名中的 A/B 应是分类变量 species 的两个水平值
  • 测量值列 countdbh 应各占 1 列,而不是 2 列

下面借助 tidyr 包中数据重塑函数,将其变成整洁数据,读者可以学完本节内容再回头看这段代码:

tidy_dt = dt %>%
  pivot_longer(-observation,
               names_to = c("speices", ".value"),
               names_sep = "_") %>%
  separate(observation, into = c("site", "surveyor"))
knitr::kable(tidy_dt, align = "c")

14b0b58afd5c7e987ff76fd14bc1f3e3.png

这里的关键是,要学会区分哪些是 变量 、 观测 、 值

2.4.2 宽表变长表

宽表的特点是:表比较宽,本来该是 "值 ” 的,却出现在 "变量(名) ” 中。

这就需要给它变到 "值 ” 中,新起个列名存为一列,这就是所谓的宽表变长表

b5717d30fb84f0e1eab6cc37d4e12588.png

1. 每一行只有 1 个观测的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值