数据框的合并
内容提要
本文介绍R语言数据框的合并与变形。纵向合并用rbind(),要求变量相同;横向合并用cbind(),要求行数相同且顺序一致;按共享变量合并可用merge()或dplyr的full_join()等。长宽格式转换可用reshape()或tidyr的pivot_wider()与pivot_longer()。整洁数据要求每行一个观测、每列一个变量,分析前通常转为长格式。
延伸解读
合并前的数据检查
使用rbind()纵向合并时,两个数据框必须具有完全相同的变量;使用cbind()横向合并时,行数必须相同且顺序一致。如果忽略这些前提,合并结果可能出错或产生无意义的数据。因此,在合并前应检查变量名、行数以及行顺序是否匹配。
按共享变量合并的灵活性
merge()和dplyr的full_join()都支持按一个或多个共享变量合并数据框。merge()是基础包函数,而dplyr提供了更多连接类型,如left_join()、right_join()等。选择哪种方式取决于是否需要保留未匹配的行以及是否已加载dplyr包。
长宽格式转换的工具选择
reshape()函数功能强大但参数较多,使用起来不够简洁。tidyr包的pivot_wider()和pivot_longer()提供了更一致和简洁的语法,适合日常数据整理。注意Indometh数据集默认不是数据框,使用pivot_wider()前需用as.data.frame()转换。
整洁数据与长格式偏好
整洁数据要求每行代表一个观测,每列代表一个变量。在分析医学数据前,通常应先将数据转换为长格式,因为R中大多数函数支持这种格式。长格式便于进行分组分析和建模,而宽格式则更利于展示和比较。
Q&A
在R语言中,如何将两个数据框纵向合并?
使用rbind()函数进行纵向合并,要求两个数据框具有相同的变量,通常用于向数据框中添加观测。
R语言中横向合并数据框用什么函数?有什么要求?
使用cbind()函数进行横向合并,要求两个数据框的行数相同且顺序一致,通常用于向数据框中添加变量。
如何按共享变量合并两个数据框?
可以使用merge()函数,通过by参数指定共享变量进行合并;也可以使用dplyr包的full_join()等函数实现相同功能。
R语言中如何将数据从长格式转换为宽格式?
可以使用base包的reshape()函数,设置direction="wide";也可以使用tidyr包的pivot_wider()函数,指定names_from和values_from参数。
什么是整洁数据?分析前通常需要将数据转换为什么格式?
整洁数据要求每行代表一个观测,每列代表一个变量。在分析医学数据前,通常应先将数据集转换为长格式,因为R中大多数函数支持这种格式。
tidyr包中用于长宽格式转换的函数有哪些?
tidyr包使用pivot_wider()将长格式转换为宽格式,使用pivot_longer()将宽格式转换为长格式。此外,gather()和spread()函数也可用于转换。