r语言提取列名_R语言笔记(六):数据框重塑(reshape2)

本文详细介绍了R语言中数据框的重塑,包括数据框的合并(rbind/cbind vs. bind_rows/bind_cols)、关联(merge vs. *_join)以及长宽数据转换(reshape2包的melt/dcast函数)。通过对base和dplyr包中相关函数的对比和实例演示,阐述了如何在数据处理中有效地进行数据框操作。
摘要由CSDN通过智能技术生成

ab7a11baa716d01d0332cb44332f01ce.png

数据处理主要内容包括:

  • 1. 特殊值处理
    • 1.1 缺失值
    • 1.2 离群值
    • 1.3 日期
  • 2. 数据转换(base vs. dplyr)
    • 2.1 筛选(subset vs. filter/select/rename)
    • 2.2 排序(order vs. arrange)
    • 2.3 转换(transform vs. mutate/transmute)
    • 2.4 分组与概括(group_by/summarise)
  • 3. 数据框重塑(base vs. dplyr)
    • 3.1 数据框的合并(rbind/cbind vs. bind_rows/bind_cols)
    • 3.2 数据框的关联(merge vs. *_ join)
    • 3.3 数据框的长宽转换(reshape2 包)

本文我们学习数据框重塑的有关内容。前文链接:

Sub-woo:R语言笔记(四):数据处理(上)​zhuanlan.zhihu.com
d80756df2de3ff4f07e32d11863fdea3.png
Sub-woo:R语言笔记(四):数据处理(中)​zhuanlan.zhihu.com
fc3965b8111930b5b0387da132ac8ed9.png

有出错或补充的地方请大神们不吝赐教,作者会持续更新!


3. 数据框重塑

这篇文章我们主要介绍基本包和 dplyr 包中用于数据框操作的函数,包括多个数据框的合并、关联以及长宽数据框的转换。

字符串的拼接可以通过 paste() 函数实现,而多个数据框也同样可以通过函数合成为一个数据框。与字符串不同的是,多个数据框的合成方式有两种,一种是合并(父母之命,媒妁之言),另一种是关联(相信缘分,因为爱情)。以下是段子,没兴趣的小伙伴可以跳过。

【段子:如何理解合并是“父母之命,媒妁之言”?这几个要合并的数据框往往没有相同的行或者列,我们只想硬生生地把它们拼成一个整体而已,或者说它们在一起不是因为相互有什么相同点,只是因为我们(父母)想[doge]。】

【段子:那又如何理解关联是“因为爱情”呢?需要关联的数据框往往具有某些相同的行或者列,比如有两份数据框,一份是小明和小红的数学成绩,另一份是小明和小红的英语成绩,很显然两份数据框都有相同的人名,因此我们就可以将二者关联,形成一份体现小明和小红数学、英语成绩的成绩单。这些相同的行或列就好比缘分和爱情,正因为有了共同点,数据框们才能更紧密地结合,更幸福地生活=。=】

3.1 数据框的合并(rbind/cbind vs. bind_rows/bind_cols)

  • base 包(rbind/cbind)

base 包提供的实现合并的函数有两个,分别是:

rbind()
# 纵向合并
cbind()
# 横向合并

【注】rbind() 要求数据框的列数相同,同时列名也要一致;cbind() 要求数据框的行数相同。举几个例子:

set1 <- data.frame(a = 1: 4, b = LETTERS[1: 4])
set2 <- data.frame(a = 0, b = c("I", "love", "u"), c = c(5, 2, 0))

set1 # 4×2 的数据框
#   a b
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
set2 # 3×3 的数据框
#   a    b c
# 1 0    I 5
# 2 0 love 2
# 3 0    u 0

# rbind(set1, set2) 列数不相同会报错
# cbind(set1, set2) 行数不相同会报错

rbind(set1, set2[, 1:3]) # 只取 set2 的前两列,使得列数与 set1 相同
#   a    b
# 1 1    A
# 2 2    B
# 3 3    C
# 4 4    D
# 5 0    I
# 6 0 love
# 7 0    u
cbind(set1[1: 3, ], set2) # 只取 set1 的前三行,使得行数与 set2 相同
  a b a    b c
1 1 A 0    I 5
2 2 B 0 love 2
3 3 C 0    u 0
# 合并出现了两个 a 列

【注】使用 cbind() 合并数据框后,可能出现列名相同的情况,某种程度上算是 cbind() 的缺陷,因此作者也更倾向于使用 dplyr 包提供的合并函数。

  • dplyr 包(bind_rows/bind_cols)

dplyr 包提供的数据框合并函数也有两个,分别是:

bind_rows()
# 纵向拼接
bind_cols()
# 横向拼接

【注】bind_rows() 根据列名对数据框进行合并,同一列名的列进行合并,不同列名的列会自动进行补齐&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值