合并数据框的行与列 大家好,这里是想做生信大恐龙的生信小白。先赞后看养成习惯,还没关注的小伙伴点点关注不迷路。今天熟悉数据操作中的数据合并。
数据合并
- 合并数据框的行与列
- 一、rbind()和cbind()函数
- 二、merge()函数
- 总结
一、rbind()和cbind()函数 rbind()(按列合并应该有相同的行数)和cbind()函数分别用于按行或按列合并给定向量、矩阵、数据框,并创建新矩阵或数据框(不了解的小伙伴可以看我之前写的R语言的数据结构
https://blog.csdn.net/ouyangk1026/article/details/121582431
)。rbind() # 按行合并指定数据
cbind() # 按列合并指定数据
举个列子??:
rbind(c(1,2,3),c(4,5,6)) # 按行合并
[,1] [,2] [,3]
[1,]123
[2,]456
cbind(c(1,2,3),c(4,5,6)) # 按列合并
[,1] [,2]
[1,]14
[2,]25
[3,]36
也可以用来向已存在的数据中添加数据,举个列子??:
a <- matrix(c(1,2,3,4,5,6),2,3) #创建矩阵
a
[,1] [,2] [,3]
[1,]135
[2,]246
cbind(a,c(5,7)) #按列合并
得到的结果如下:
cbind(a,c(5,7))
[,1] [,2] [,3] [,4]
[1,]1355
[2,]2467
使用rbind()和cbind()函数要求等长,意思就是如果按列合并,数据的长度是列数的正整数倍数。
二、merge()函数 merge()函数具有cbind()函数与rbind()函数的功能,而且可以根据相同的行名和列名合并数据。
merge(
x # 待合并的数据框
y # 待合并的数据框
by #用作合并基准的列
all = FALSE #共同值不存在xy二者之一时,可以使用all
)
举个列子??:
# 数学成绩
math <- data.frame(name=c("迪迦","泰罗","赛文"),math=c(76,84,64))
# 英语成绩
english <- data.frame(name=c("泰罗","赛文","迪迦"),english=c(95,59,42))
可以看到我故意将姓名一行顺序改变了,然后我们用merge()函数将两个数据框合并。
(c <- merge(math,english))
name math english
1 迪迦7642
2 赛文6459
3 泰罗8495
可以看到merge()函数将题目按想同列名进行了合并。如果我们使用cbind()函数,看看是什么效果?
(d <- cbind(math,english))
name math name english
1 迪迦76 泰罗95
2 泰罗84 赛文59
3 赛文64 迪迦42
cbind()函数直接将他们合并,即没排序也没消除相同列。
接下来讲一下all的使用,举个列子??:
#创建两个数据框,共有四个奥特曼的成绩
math <- data.frame(name=c("迪迦","泰罗","赛文"),math=c(76,84,64))
english <- data.frame(name=c("艾斯","赛文","迪迦"),english=c(95,59,42))
如果我们按照之前的使用方法,将会得到下面的结果:
# 只剩下两位奥特曼了
(c <- merge(math,english))
name math english
1 迪迦7642
2 赛文6459
【R语言学习笔记|R语言合并数据框的行与列】接下来我们使用all:
#当all为TRUE时,不是xy的共同行时,会被填充为NA
(c <- merge(math,english,all = TRUE))
name math english
1 艾斯NA95
2 迪迦7642
3 赛文6459
4 泰罗84NA
总结 好啦!今天我们讲了数据的合并,讲了三个函数,分别时:cbind(),rbind(),merge()。希望小伙伴们可以多多练习。都看到这里了,请给大恐龙点点赞点点关注!下次再见啦!
推荐阅读
- R语言学习笔记|R语言apply系列函数
- R语言学习笔记|R语言数据拆分
- python|sqlmap使用
- R语言学习笔记|R语言滞后差分diff()函数
- R语言应用|R语言-线性回归实例(包括所有源码)
- Python量化|行业轮动(股票)——Python量化
- java|Java 内存泄漏的排查
- java|40道Java基础常见面试题及详细答案
- 框架|IV XXSC-10