利用R语言合并数据框的行与列
在数据分析与处理中,经常需要将多个数据集整合在一起。在 R 语言中,我们可以使用 rbind() 和 cbind() 按位置进行简单的行列拼接,也可以使用 merge() 函数根据共同字段(如 ID)智能合并数据框,甚至处理缺失值。
rbind() 与 cbind() 函数详解
rbind()(按行合并)和 cbind()(按列合并)是基础的数据结构组合函数,适用于向量、矩阵和数据框。它们要求参与合并的对象具有相应的兼容维度:按行合并时行数需一致或自动对齐,按列合并时长度的倍数关系决定了填充方式。
第1步:按行合并 (rbind)
目的:将数据垂直堆叠,增加数据框的样本量。
操作:使用 rbind() 将多个包含相同变量的行组合在一起。
# 示例:按行合并两个向量
rbind(c(1,2,3), c(4,5,6))
# 结果输出:
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 4 5 6
第2步:按列合并 (cbind)
目的:将特征横向扩展,增加数据框的维度(变量数)。
注意:若长度不完全相等,R 会尝试循环补齐,可能导致数据错位。
# 示例:按列合并向量
cbind(c(1,2,3), c(4,5,6))
# 结果输出:
# [,1] [,2]
# [1,] 1 4
# [2,] 2 5
# [3,] 3 6
# 示例:向现有矩阵添加新列
a <- matrix(c(1,2,3,4,5,6), nrow=2)
cbind(a, c(5,7))
# 结果输出:
# [,1] [,2] [,3] [,4]
# [1,] 1 3 5 5
# [2,] 2 4 6 7
merge() 函数与关键值匹配
当需要依据特定标识符(如姓名、ID)关联不同来源的数据时,merge() 函数比位置合并更可靠。它默认执行内连接(Inner Join),仅保留双方都存在的记录。
第1步:基于共同键合并数据
入口:数据框中包含相同的列名作为连接基准。
动作:调用 merge(x, y),R 会自动寻找两表中共同的列名进行匹配。
# 创建数学成绩表
math <- data.frame(name=c("迪迦","泰罗","赛文"), math=c(76,84,64))
# 创建英语成绩表(注意姓名顺序不同)
english <- data.frame(name=c("泰罗","赛文","迪迦"), english=c(95,59,42))
# 执行合并
result <- merge(math, english)
print(result)
# 结果:
# name math english
# 1 迪迦 76 42
# 2 赛文 64 59
# 3 泰罗 84 95
上述结果表明 merge() 成功通过 name 列建立了关联。作为对比,若使用 cbind(),则会无视内容直接按顺序并排,导致数据逻辑错乱:
# 错误示例:直接使用cbind会导致名字对不上
(d <- cbind(math, english))
# name math name english
# 1 迪迦 76 泰罗 95
# ...
第2步:使用 all 参数保留完整记录
目的:在进行全外连接(Full Outer Join)时,确保只出现在一方数据集中的记录不被丢弃。
操作:设置参数 all = TRUE。若某方无对应数据,则填充为 NA。
# 创建一个包含额外成员的数据表
english2 <- data.frame(name=c("艾斯","赛文","迪迦"), english=c(95,59,42))
# 默认合并(丢失了没有数学成绩的艾斯,也没有数学记录的泰罗)
merge(math, english2)
# name math english
# 1 迪迦 76 42
# 2 赛文 64 59
# 开启全连接:all = TRUE
# 此时泰罗显示有数学分无英语分,艾斯显示有英语分无数学分
result_all <- merge(math, english2, all = TRUE)
print(result_all)
# name math english
# 1 艾斯 NA 95
# 2 迪迦 76 42
# 3 赛文 64 59
# 4 泰罗 84 NA
以上就是R语言合并数据框详细方法的介绍,更多关于R数据处理进阶技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









