R语言数据集合并、数据增减、不等长合并
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
数据选取与简单操作:
which | 返回一个向量中指定元素的索引 |
which.max | 返回最大元素的索引 |
which.min | 返回最小元素的索引 |
sample | 随机在向量中抽取元素 |
subset | 根据条件选取元素 |
sort | 升序排列元素 |
rev | 反转所有元素 |
order | 获取排序后的索引 |
table | 返回频数表 |
cut | 将数据分割为几部分 |
split | 按照指定条件分割数据 |
rbind | 行合并 |
cbind | 列合并 |
merge | 按照指定列合并矩阵或者数据框 |
一、数据合并
1、merge()函数
最常用merge()函数,但是这个函数使用时候这两种情况需要注意:
1、merge(a,b),纯粹地把两个数据集合在一起,没有沟通a、b数据集的by,这样出现的数据很多,相当于a*b条数据;
2、merge函数是匹配到a,b数据集的并,都有的才匹配出来,如果a、b数据集ID不同,要用all=T(下面有all用法的代码)。
#横向合并 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
#纵向合并 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用法
> 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函数
生成一长串字符向量。
paste(c("X","Y"),1:10,sep="") #"X”,"Y"是长度为2的字符向量,1:10 长度为10的向量。命令是让这两个向量粘合在一起生成新的字符串向量,粘合后的新字符之间没有间隔。
#—————————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包)
二、数据增减
x=x[,-1] #这个就代表,删除了x数据集中第一列数据
或用dplyr包中的mutate函数
a=mutate(Hdma_dat,dou=2*survived,dou4=4*survived) Hdma_dat$dou=a$dou Hdma_dat$dou4=a$dou4 #两个新序列,加入到Hdma数据集汇总
筛选变量服从某值的子集
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。
#————————————————————————————不等长合并 #如何解决合并时数据不等长问题——两种方法: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()
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
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
R语言数据集合并、数据增减、不等长合并的更多相关文章
- R语言重要数据集分析研究——R语言数据集的字段含义
R语言数据集的字段含义 作者:马文敏 选择一种数据结构来储存数据 将数据输入或导入到这个数据结构中 数据集的概念 数据集通常是有数据结构的一个矩形数组,行表示规则,列表示变量. 不同的行业对数据集的行 ...
- R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)
R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较. 一.日期分组 1.关于时间的包都有很多 ...
- [译]用R语言做挖掘数据《二》
数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...
- R语言分析朝阳医院数据
R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...
- R语言实现金融数据的时间序列分析及建模
R语言实现金融数据的时间序列分析及建模 一 移动平均 移动平均能消除数据中的季节变动和不规则变动.若序列中存在周期变动,则通常以周期为移动平均项数.移动平均法可以通过数据显示出数据长期趋势的变动 ...
- R语言处理Web数据
R语言处理Web数据 许多网站提供的数据,以供其用户的消费.例如,世界卫生组织(WHO)提供的CSV,TXT和XML文件的形式的健康和医疗信息报告.基于R程序,我们可以通过编程提取这些网站的具体数据. ...
- R语言Data Frame数据框常用操作
Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...
- R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理
在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数 ...
- 转载:R语言Data Frame数据框常用操作
Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可 ...
随机推荐
- C#使用Redis
一,引入dll 1.ServiceStack.Common.dll 2.ServiceStack.Interfaces.dll 3.ServiceStack.Redis.dll 4.ServiceSt ...
- hexo 博客支持PWA和压缩博文
目标网站 https://blog.rmiao.top/ PWA yarn add hexo-offline 然后在root config.yml里新增 # offline config passed ...
- Spring学习之装配Bean
通过注解配置的bean,默认是单例 @Autowired private CodeTypeService codeTypeService; 测试:在Controller层调用Service层对象Cod ...
- 安装 cgilib 0.5
下载软件包下载链接:http://pan.baidu.com/s/1gdzOiVT 解包tar zxvf cgilib-0.5.tar.gzcd cgilib-0.5 makecp libcgi.a ...
- iOS-打电话、发短信、发邮件【指定QQ用户发送QQ消息】
1.发短信 头文件 #import <MessageUI/MessageUI.h> 头部代理 @interface ViewController ()<MFMessageCompos ...
- Mybatis异常There is no getter for property named 'XXX' in 'class com.xxx.xxx.UserAccountDTO
mybatis报错异常信息如下: 解决: 在接口中加上注解:@Param("userAccountDTO"),如图
- HDU [P1281]棋盘游戏
二分图求最大匹配 我们以每一个格子为边,以行和列为两个集合,那么求二分图的最大匹配数就是最多能放车的数目,那么什么是重要点呢?就是删掉后会影响最大匹配数的匹配边. 我们求出最大匹配数后,枚举匹配边,将 ...
- vue2.0路由进阶
一.路由的模式 第一种用history方式实现,HTML5使用window.history.pushState()实现路由的切换而不刷新页面. 第二种使用hash值的方式来实现. vue2.0两种都可 ...
- Vue中结合Flask与Node.JS的异步加载功能实现文章的分页效果
你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:http://blog.pushy.site/posts/15 ...
- Zabbix监控之迁移zabbix server
abbix监控中有时会根据需要对zabbix服务器进行迁移,zabbix迁移是非常简单的,因为zabbix的前端所有的操作都存在zabbix数据库里.所以zabbix迁移只需对zabbix库中相应的表 ...