R语言基础知识.docx

上传人:b****5 文档编号:28738436 上传时间:2023-07-19 格式:DOCX 页数:10 大小:17.99KB
下载 相关 举报
R语言基础知识.docx_第1页
第1页 / 共10页
R语言基础知识.docx_第2页
第2页 / 共10页
R语言基础知识.docx_第3页
第3页 / 共10页
R语言基础知识.docx_第4页
第4页 / 共10页
R语言基础知识.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

R语言基础知识.docx

《R语言基础知识.docx》由会员分享,可在线阅读,更多相关《R语言基础知识.docx(10页珍藏版)》请在冰豆网上搜索。

R语言基础知识.docx

R语言基础知识

R语言基础知识

在做数据处理的时候我们经常会碰到数据合并的问题,比如将两个或者多个相同行数的数据框合并起来(cbind)、将两个或多个等长的向量合并起来(cbind)、或者将不等长的数据框按照某一列合并起来(merge、join)。

下面给大家一一介绍一下这几个函数的用法,并且我们还会在后面附带上Linux中如何用shell这把瑞士军刀来达到R中数据列合并的效果:

1、等长数据框和向量的合并

1.1cbind函数

如果要直接横向合并两个矩阵或数据框,并且不需要指定一个公共索引,那么可以直接使用cbind()函数。

这个函数将横向合并对象A和对象B。

为了让它正常工作,每个对象必须拥有相同的行数,且要以相同顺序排序。

cbind(object1,object2,…)#按列合并对象

例:

>roster

IDStudent

11John

22Angela

33David

44Joel

55Mary

>score

MathScienceEnglish

15029525

26009922

34128018

46258215

55228920

>roster_cbindroster_cbind

IDStudentMathScienceEnglish

11John5029525

22Angela6009922

33David4128018

44Joel6258215

55Mary5228920

如果需要纵向合并两个数据框(数据集)请使用rbind()函数。

在使用rbind()函数时,两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。

如果dataframeA中拥有dataframeB中没有的变量,在合并它们之前需做以下处理:

(1)删除dataframeA中的多余变量;

(2)在dataframeB中创建追加的变量并将其值设为NA(缺失)。

纵向合并数据通常用于向数据框中添加观测。

2、按列合并

当两个数据框通过一个或者多个共有变量进行联接时(即一种内联结,innerjoin),我们可以使用merge函数,也可以使用plyr包的join函数。

join函数运行速度比merge函数快,数据较大时用join()函数合并数据会节约不少时间。

2.1merge函数

以数据框例:

totalIDtotal_student

IDnamescore

11Jim89

22Tony22

33Lisa78

44Tom78

dataframe的填充默认按列填充;merge()函数较我们之前介绍的cbind()和rbind()两个函数更加”智能”。

2.2join函数

join()函数是plyr包的一个辅助函数。

大家在使用前需要先安装plyr包(install.package("plyr"))。

plyr包遵循三位一体的Split-Apply-Combine(拆分数据,应用函数,组合结果)思想,设置了超过50个函数来应对各类型数据和处理的情况,使数据处理变得极为简单方便,极大地提高了数据处理的效率。

join()函数的一般使用格式为:

join(x,y,by=NULL,type="left",match="all")

作用:

联合两个数据框

参数:

x,y是两个数据框;by是指定要联合的变量,默认值为所有的变量;type是指定联合的方式

例:

>x1join(x,y,by="x2")#若不指定联合的变量会按默认按共同的变量连接

x1x2y1

115NA

22630

33740

448NA

>join(x,y,by="x2",type="inner")#type="inner"表示只是把匹配的情况的列出来

x1x2y1

12630

23740

>join(x,y,by="x2",type="right")#type="right"表示右连接,y中数据全部显示,x中x2中没有1和2,以NA表示。

join()函数中,type的默认值是左连接type="left"。

x2x1y1

11NA10

22NA20

36230

47340

>join(x,y,by="x2",type="left")

x1x2y1

115NA

22630

33740

448NA

>join(x,y,by="x2",type="full")#全部显示

x1x2y1

115NA

22630

33740

448NA

5NA1NA

6NA220

>y[,3]join(x,y,"x2",type="inner",match="first")

x2x1y1V3

262306

373406

3、Linux下的数据列合并

3.1join

在R里面我们有join函数来进行数据列的合并,在Linux下,我们也有jion函数,也是用来进行数据列的合并的,跟R里面的merge和join是类似的功能。

我们来看下它的用法:

join用来将来自两个分类文本文件的行连在一起。

文本文件中的域通常由空格或tab键分隔,但如果愿意,可以指定其他的域分隔符。

一些系统要求使用join时文件域要少于20,为公平起见,如果域大于20,应使用DBMS系统。

为有效使用join,需分别将输入文件分类。

其一般格式为:

join[options]file1file2

选项[options]:

an:

n为一数字,用于连接时从文件n中显示不匹配行。

例如,-a1显示第一个文件的不匹配行,-a2为从第二个文件中显示不匹配行。

o:

n.mn为文件号,m为域号。

1.3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1.3,2.1。

t:

域分隔符。

用来设置非空格或tab键的域分隔符。

例如,指定冒号做域分隔符-t:

如果一个文件与另一个文件没有匹配域时怎么办?

这时经常使用指定两个文件的-a选项。

join-a1-a2file1file2

3.2paste

Linux里面的paste函数跟R里面的cbind有点类似,但是不是完全一样。

也是直接将两个文件按列直接拼起来。

[kwu@localhosttest]$cata

12

23

35

49

[kwu@localhosttest]$catb

12

23

35

49

510

[kwu@localhosttest]$pasteab

1212

2323

3535

4949

510

在R语言里面也有paste函数,但是作用跟shell中的不一样。

它是一个字符串处理函数:

paste()函数的一般使用格式为:

paste(...,sep="",collapse=NULL)

其中…表示一个或多个R可以被转化为字符型的对象;参数sep表示分隔符,默认为空格;参数collapse可选,如果不指定值,那么函数paste的返回值是自变量之间通过sep指定的分隔符连接后得到的一个字符型向量;如果为其指定了特定的值,那么自变量连接后的字符型向量会再被连接成一个字符串,之间通过collapse的值分隔。

下面用具体的例子说明各参数的作用:

paste()函数把它的自变量连成一个字符串,中间用空格分开,如

>paste("Hello","world")

[1]"Helloworld"

连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用。

>paste("A",1:

6,sep="")

[1]"A1""A2""A3""A4""A5""A6"

如果希望将一个向量中所有字符连接在一起且中间用逗号分隔,使用paste(x,collapse)即可,结果只是返回一个元素。

或者可以使用函数toString来实现。

但是,toString函数本来就是利用paste来实现的,所以最好还是使用paste()。

>letters[1:

6]

[1]"a""b""c""d""e""f"

>paste(letters[1:

6],collapse=",")

[1]"a,b,c,d,e,f"

同时使用了参数seq与collapse。

>paste("A",1:

6,sep="",collapse=",")

[1]"A1,A2,A3,A4,A5,A6"

如果只是希望向量x中每一个元素和特定的字符(如下划线_)连接,使用paste(x,seq=)即可,如

>letters[1:

4]

[1]"a""b""c""d"

>paste(letters[1:

4],seq='_')

[1]"a_""b_""c_""d_"

3.3awk

下面我们附带一个awk函数的讲解:

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk一般命令行方式:

awk[-Ffield-separator]'commands'input-file(s)

其中,commands是真正awk命令,[-F域分隔符]是可选的。

input-file(s)是待处理的文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。

通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

若需要合并两个文件的列,可使用如下命令:

awk'NR==FNR{a[i]=$0;i++}NR>FNR{printa[j]""$0;j++}'file1file2#和paste效果类似

若需要合并的列在一个文件里面,可使用如下命令:

awk'{print$1"\t"$2"\t"$4}'input-file(s)#取第1、第2、第4列的数据

例如:

有file1和file2两个文件,需要把file2的第二列合并到file1,使File1并成三列.

[zengqin1@cu01Rwork]$catfile1

IDname

1Jim

2Tony

3Lisa

4Tom

[zengqin1@cu01Rwork]$catfile2

IDscore

189

222

378

478

[zengqin1@cu01Rwork]$joinfile1file2##第一种方法:

利用join将file1和file2合并

IDnamescore

1Jim89

2Tony22

3Lisa78

4Tom78

[zengqin1@cu01Rwork]$pastefile1file2##第二种方法:

利用paste将file1和file2合并

IDnameIDscore

1Jim189

2Tony222

3Lisa378

4Tom478

[zengqin1@cu01Rwork]$pastefile1file2|awk'{print$1"\t"$2"\t"$4}'##第二种方法:

利用paste将file1和file2合并,并去除重复的第三列

IDnamescore

1Jim89

2Tony22

3Lisa78

4Tom78

能够熟练运用数据的列合并方法会给我们的数据处理带来极大的方便,提高我们数据处理的效率。

最新最早最热1条评论2条新浪微博CondaR语言里面如何合并数据,cbind、merge、join函数详解!

还有附带Linux瑞士军刀如何合并数据列!

2015年12月8日回复顶转发社交帐号登录:

微信微博QQ人人更多?

R语言在线正在使用多说

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1