京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R语言数据集合并、数据增减、不等长合并
数据选取与简单操作:
一、数据合并
1、merge()函数
最常用merge()函数,但是这个函数使用时候这两种情况需要注意:
1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;
2、merge函数是匹配到a,b数据集的并,都有的才匹配出来,如果a、b数据集ID不同,要用all=T(下面有all用法的代码)。
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
#横向合并
ID<-c(1,2,3,4)
name<-c("Jim","Tony","Lisa","Tom")
score<-c(89,22,78,78)
student1<-data.frame(ID,name)
student2<-data.frame(ID,score)
total_student<-merge(student1,student2,by="ID") #或者rbind()
total_student
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
#纵向合并
ID<-c(1,2,3)
name<-c("Jame","Kevin","Sunny")
student1<-data.frame(ID,name)
ID<-c(4,5,6)
name<-c("Sun","Frame","Eric")
student2<-data.frame(ID,name)
total<-cbind(student1,student2)
total
merge的all用法
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
> id=c("1","2","3")
> M=c("7","2","3")
> ink2=data.frame(id,M)
>
> merge(ink1,ink2,by="id",all=T) #所有数据列都放进来,空缺的补值为NA
id R M
1 1 9 7
2 2 7 2
3 4 9 <NA>
4 3 <NA> 3
> merge(ink1,ink2,by="id",all=F) #默认,只取两者的共有的部分
id R M
1 1 9 7
2 2 7 2
其中,all=T代表全连接,all.x=T代表左联结;all.y=T代表右连接
2、dplyr包
dplyr包的数据合并,
一般用left_join(x,y,by="name") 以x为主,y中匹配到的都放进来, 但,y中没有的则不放过来。
需要这个x数据集是全集,比较大。

3、paste函数
生成一长串字符向量。
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
paste(c("X","Y"),1:10,sep="") #"X”,"Y"是长度为2的字符向量,1:10 长度为10的向量。命令是让这两个向量粘合在一起生成新的字符串向量,粘合后的新字符之间没有间隔。
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
#—————————paste中seq与collapse区别————————————————————
a = c(1, 2, 3, 4, 5)
names(a) = c('m', 'n','o', 'p', 'q')
# 主要是区分使用sep和collapse
b = paste(a, names(a), sep = "/") #不同向量合并在一起,但是还是各自向量
c = paste(b, collapse = ",") #不同向量合并在一起,但是变成一个向量
mode(b) #变量类型
mode(c)
4、cbind和rbind函数
cbind()和rbind(),cbind()按照纵向方向,或者说按列的方式将矩阵连接到一起。
rbind()按照横向的方向,或者说按行的方式将矩阵连接到一起
rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长;指标顺序必须一致。相比来说,其他一些方法要好一些,有dplyr,sqldf中的union
5、sqldf包
利用SQL语句来写,进行数据合并,适合数据库熟悉的人,可参考:
R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)
二、数据增减
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
x=x[,-1] #这个就代表,删除了x数据集中第一列数据
或用dplyr包中的mutate函数
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
a=mutate(Hdma_dat,dou=2*survived,dou4=4*survived)
Hdma_dat$dou=a$dou
Hdma_dat$dou4=a$dou4 #两个新序列,加入到Hdma数据集汇总
筛选变量服从某值的子集
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
subset(airquality, Temp > 80, select = c(Ozone, Temp))
subset(airquality, Day == 1, select = -Temp)
subset(airquality, select = Ozone:Wind)
三、数据纵横加总
R使用rowSums函数对行求和,使用colSums函数对列求和。
四、不等长合并
1、plyr包
rbind.fill函数可以很好将数据进行合并,并且补齐没有匹配到的缺失值为NA。
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
#————————————————————————————不等长合并
#如何解决合并时数据不等长问题——两种方法:do.call函数以及rbind.fill函数(plyr包)
#rbind.fill函数只能合并数据框格式
#do.call函数在数据框中执行函数(函数,数据列)
library("plyr") #加载获取rbind.fill函数
#第一种方法
list1<-list()
list1[[1]]=data.frame(t(data.frame(Job_Pwordseg.ct[1])))
list1[[2]]=data.frame(t(data.frame(Job_Pwordseg.ct[2])))
do.call(rbind.fill,list1)
#第二种方法
u=rbind.fill(data.frame(t(data.frame(Job_Pwordseg.ct[1]))),data.frame(t(data.frame(Job_Pwordseg.ct[2]))))
核心函数是plyr包中的rbind.fill函数(合并的数据,必须是data.frame),do.call可以用来批量执行。(do.call用法)
关于do.call其他用法(R语言 函数do.call()使用 )
有一个list,想把里面的所有元素相加求和。发现了两个很有意思的函数
list <- list(matrix(1:25, ncol = 5), matrix(4:28, ncol = 5), matrix(21:45, ncol=5))
list.sum<-do.call(sum,list)
list.sum<-do.call(cbind,list)
do.call() 是告诉list一个函数,然后list里的所有元素来执行这个函数。
2、dplyr包
dplyr::bind_rows()
[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
mpg cyl hp drat wt qsec vs am gear carb disp
(dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1 21.0 6 110 3.90 2.620 16.46 0 1 4 4 NA
2 21.0 6 110 3.90 2.875 17.02 0 1 4 4 NA
3 22.8 4 93 3.85 2.320 18.61 1 1 4 1 NA
4 21.4 6 110 3.08 3.215 19.44 1 0 3 1 NA
5 17.8 6 123 3.92 3.440 18.90 1 0 4 4 167.6
6 16.4 8 180 3.07 4.070 17.40 0 0 3 3 275.8
7 17.3 8 180 3.07 3.730 17.60 0 0 3 3 275.8
8 15.2 8 180 3.07 3.780 18.00 0 0 3 3 275.8
效果是,不匹配到的放在最后,且等于NA NA NA NA
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 1. VLOOKUP:按行跨区域找数据(最常用) 作用:在指定的表格或数据区域的第一列里找目标值, ...
2026-10-23数据敏感度不是天赋,也不是“看一眼数字就能发现问题”的直觉。对市场专员来说,它更接近一套可练习的工作习惯:看到投放ROI、 ...
2026-10-23市场营销专员转数据分析,不是从零重来。你已有的渠道投放、活动执行、线索跟进经验,本身就是分析工作的原料——缺的不是业务理 ...
2026-10-23先说结论:市场岗位并非必须考数据分析证书。招聘方更常看的是你能否把渠道效果、活动ROI、线索转化这些业务问题讲清楚,证书只 ...
2026-10-23市场分析师的职场知识提升,最怕两件事:一是把“学工具”当成学习本身,Excel、SQL、Python轮着学一遍,回到工作里还是不知道怎 ...
2026-10-23市场分析师的通用技能可以归为五块:业务与市场理解、调研与竞品分析、用户与渠道数据分析、指标与分析表达、工具操作。它们不是 ...
2026-10-23市场分析师的核心技能,可以先用一个框架回答:懂业务与市场、能取数与处理数据、会指标与分析方法、能把洞察讲清楚。这四块是共 ...
2026-10-23市场策划不是“会写文案、能办活动”这么简单。它本质上是一个用创意和资源撬动业务结果的岗位:先理解市场和人群,再形成方案, ...
2026-10-23社群运营不是“拉群、发通知、维护气氛”这么简单。它真正要对的结果是:用户进得来、留得住、愿意互动、最终产生转化或复购。因 ...
2026-10-23营销人的能力提升计划,最容易做成一张课程清单:报名几门课、读完几本书、考一个证,年底回头看,工作方式却没变。问题不在努力 ...
2026-10-23人力资源专员的职场价值,不由“做了多少事”决定,而由“解决什么问题、留下什么成果”决定。同样做招聘、算考勤、办入离职,有 ...
2026-10-23产品经理的职场价值,不主要由会画原型、会写文档决定,而由能否用业务结果证明自己的判断与推动决定。同一岗位的人价值差距大, ...
2026-10-23运营专员的能力提升,最容易走偏成两件事:一是把市面上所有工具都学一遍,二是把沟通、协作这类通用能力当成唯一答案。更有效的 ...
2026-10-23市场总监的沟通与管理,难点通常不在话术,而在三件事能否同时成立:向上用结论和数据对齐目标,平级用共同指标换取协同,向下用 ...
2026-10-23市场分析师的沟通失分,往往不是“嘴笨”,而是三件事没做好:结论没提炼出来、指标口径没对齐、建议没有落到决策上。所以提升沟 ...
2026-10-23社群运营做久了,很容易陷入一种忙碌:每天在群里发内容、回消息、做活动,热闹的时候很热闹,可一到月底复盘,说不清哪些动作带 ...
2026-10-23品牌运营的技能提升,最容易走偏的一步是先报课、先学工具。更有效的顺序是:先沿“品牌定位与策略—内容与传播—渠道与活动执行 ...
2026-10-23营销人员想赢得客户信任,单靠话术和关系维护越来越不够。客户在签约前会追问:你懂我的业务吗?方案里的数字怎么来的?承诺的效 ...
2026-10-23APP运营专员的能力提升,容易陷入两种误区:一是把“会用工具”当成能力全部,学了一堆Excel函数和SQL语法,回到岗位仍说不清一 ...
2026-10-23社群运营的沟通难点,不在于“会不会说话”,而在于同一件事要对三类人说清楚:对用户要安抚情绪、给出确定答复;对产品、活动、 ...
2026-10-23