数据框(data.frame)是最常用的数据结构,用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同数据列的数据类型可以相同,也可以不同,但是每列的行数(长度)必须相同。数据框的每列都有唯一的名字,在已创建的数据框上,用户可以添加计算列,这样,R引擎根据同一行的数据列,计算出表达式的值,并把该值作为计算列的值。数据框是数据分析中最重要的数据对象,必须熟练掌握数据框的操作。

一,创建数据框

R语言提供三种方式创建数据框,

1,读取文件

第一种方法是通过读取文件创建,常用的是用于读取文件的函数是read.table(),语法是如下所示:

read.table(file, header = FALSE, sep = "", quote = "\"'",           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),           row.names, col.names, as.is = !stringsAsFactors,           na.strings = "NA", colClasses = NA, nrows = -1,           skip = 0, check.names = TRUE, fill = !blank.lines.skip,           strip.white = FALSE, blank.lines.skip = TRUE,           comment.char = "#",           allowEscapes = FALSE, flush = FALSE,           stringsAsFactors = default.stringsAsFactors(),           fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

参数释义:file:读取数据的文件名和路径,文件名可以是文件的绝对路径名,或是相对路径名,如果文件名是相对路径名,那么文件名是基于当前的工作目录,当前的工作目录可以通过函数 getwd() 获取;

header:逻辑值,文件的第一行是否包含列名;

sep:用于指定字段(列)的分隔符,默认值是空字符,行的分隔符是回车和换行;

quote:字符的引用符,只有当文本使用引用符,才被视为字符,设置为空字符,禁用引用符;

dec:小数点符号;

check.names:逻辑值,是否检查列名是否符合变量的命名规范;

colClasses:用于指定列的数据类型;

fill:逻辑值,当设置为TRUE时,如果行的列数不够,那么填充空白的字段;

strip.white:逻辑值,只有当sep参数指定时,用于移除字符字段两端的空格;

blank.lines.skip :逻辑值,当为TRUE时,跳过空白的数据行;

encoding :字符串,用于指定字符的编码规则,常用的编码规则是UTF-8;

nrows :整数值,能够读取的最大数据行数量;

skip:整数值,从文件的开头,跳过一定数量的数据行,从下一行开始读取数据;

函数read.csv()是read.table()的包装函数,专门用于读取csv文件,例如:df

2,读取关系表数据

第二种方法是从关系型数据库执行SQL查询,根据查询结果创建数据框;当连接SQL Server数据库时,使用ODBC驱动程序连接数据库,R脚本引用RODBC包,调用odbcConnect连接,使用sqlQuery执行查询,获取查询结果填充数据框:library(RODBC)cn

3,使用函数创建

第三种方法是通过函数 data.frame()创建数据框,用户需要输入指定的数据填充数据框变量,函数data.frame()的参数row.names用于指定行的标识符,有三种指定行标识符的方式:设置行的名称,为每一行命名,这样,可以通过行名称来索引观测;

把该参数设置为NULL,取消行的命名,R引擎会自动生成递增的整数序列作为行标识符,也就是所谓的行号;

也可以把行标识符设置为数据框的列名,这样,R引擎把该列的值作为行标识符,这相当于关系表的主键列。

例如,以下脚本通过指定行名称的方式来指定行标识符:

> df 0.5,+     c4=c('r','g','b'),+     row.names=c('r1','r2','r3')+ )

打印数据框,数据框有两个维度,行和列:> df   c1 c2    c3 c4r1  a  1  TRUE  rr2  b  2 FALSE  gr3  c  3 FALSE  b

二,查看数据框的维度名称和各个维度的元素数量

1,查看列名称

通过函数colnames()或names()返回数据框的列名称> colnames(df)> names(df)[1] "c1" "c2" "c3" "c4"

2,查看列名称

通过函数rownames()返回数据框的行名称,> rownames(df)[1] "r1" "r2" "r3"

3,查看行数量和列数量

通过函数nrow()(或函数ncol()),返回数据框的行数(或列数),函数length()返回的结果和ncol()函数返回的结果相同。> nrow(df)[1] 3> ncol(df)[1] 4

4,查看数据框的各个维度的名称和数量

通过dimnames()函数查看各个维度的名称,该函数返回的是列表类型;通过dim()返回行的数量和列的数量,该函数返回的是整数向量:

> dimnames(df)[[1]][1] "r1" "r2" "r3"[[2]][1] "c1" "c2" "c3" "c4"> dim(df)[1] 3 4

三,索引数据框

索引数据框,使用中括号[],而下标有四种表示方式:正整数,负整数,逻辑值和字符(行或列的名称),由于数据框是二维数据结构,下标的格式是df[row,col]。

1,选择多列

例如,获得数据框的一个子集,索引数据框中的第一行和第二行,第二列和第三列的数据子集:> df[1:2,2:3]   c2    c3r1  1  TRUEr2  2 FALSE

2,选择单列

如果只选择数据框的一列,可以使用列表样式的索引:带有正整数或名称的嵌套中括号,或者带有名称的美元符号运算符。

通过美元符号$和列名来索引数据框,选取第二行和第三行:> df$c1[2:3][1] b cLevels: a b c

从返回的结果中可以看到,R引擎把字符类型的列自动转换为因子类型来存储,可以使用as.character()函数把因子类型转换为字符类型的向量:> as.character(df$c1[2:3])[1] "b" "c"

也可以使用嵌套的中括号[[]]来获取索引数据框:> as.character(df[["c1"]][2:3])> as.character(df[[1]][2:3])

三,获取数据框的子集

从数据框中按照特定的条件获取子集,这实际上是根据特定列的值,来限制返回的观测的数量。

1,通过条件获取数据框的子集> with(df,df[c2<=2|c3,])   c1 c2    c3 c4r1  a  1 FALSE  rr2  b  2  TRUE  g

2,通过subset()函数获取子集

函数subset()用于获取数据框的子集,第一个参数(x)是数据框;第二个参数(subset)是逻辑表达式,用于过滤数据行;第三个参数(select)是投影的数据列,用于选择的特定的列。subset(x, subset, select, drop = FALSE)

例如,从df中获取c2不大于2,返回第二列和第三列的结果:> subset(df,c2<=2,c(2:3))   c2    c3r1  1  TRUEr2  2 FALSE

四,操纵数据框(基础)

操纵数据框,例如,选择子集(subset),合并数据框,排序数据框,添加或修改数据列,把数据值排名等,最终把数据转换成相应的形式,用于数据分析,本节只简单分享操纵数据框的方法。

1,添加列和行

使用rbind()函数向数据框中添加一行或多行数据,也就是说,按行纵向扩展;使用cbind()函数向数据框中添加一列或多列数据,也就是说,按列横向扩展。

2,合并数据框

使用merge9)函数合并数据框,merge()函数的作用类似于SQL语言中的连接(Join)操作,用于把两个数据框,按照特定的数据列做连接操作,函数的定义如下:merge(x, y,       by = intersect(names(x), names(y)), by.x = by, by.y = by,       all = FALSE, all.x = all, all.y = all,      sort = TRUE,       suffixes = c(".x",".y"),...)

参数注释:x,y 参数:指定合并的两个数据框;

by参数:字符串,指定合并列,当两个数据框有相同的数据列名字时,merge函数将按照同名的数据列名称合并;

by.x,by.y 参数:字符串,分别指定数据框的合并列,用于指定merge函数将按照数据框x和y的哪些数据列进行合并;

all:逻辑值,完全显示两个数据框的所有数据行,当合并列的值不存在于数据框x或y中,该数据框的列值显示为NA;

all.x,all.y:逻辑值,指定完全显示的数据框,例如,当折merge函数的all.x=TRUE,all.y=FALSE是,合并的结果把数据框x的数据列全部显示,如果合并列的值不存在于数据框y,那么y的其他数据列显示为NA。

sort:逻辑值,指定是否对结果排序;

suffixes:为非合并列添加后缀;

例如,创建两个数据框,按照df1的数据列x,和数据框df2的数据列m,对这两个数据框执行合并操作:

> df1=data.frame(x=c('a','c','e'),y=1:3)> df2=data.frame(m=c('a','c','f'),n=4:6)> merge(df1,df2,by.x='x',by.y='m')  x y n1 a 1 42 c 2 5> > merge(df1,df2,by.x='x',by.y='m',all=TRUE)  x  y  n1 a  1  42 c  2  53 e  3 NA4 f NA  6

2,添加和替换列

方法1:直接对数据框的数据列进行赋值,来实现对数据框的数据列的添加或替换:df1[,'z']=c('z1','z2','z3')

方法2:使用with参数,with函数(with(data, expr))接受一个数据框对象和要计算的表达式作为输入参数,with函数返回值是表达式的值,with函数只能添加或修改一个数据列:df1[,'z']=with(df1,c('z1','z2','z3'))

方法3:使用within函数,within函数(within(data, expr))接受一个数据框对象和要计算的表达式作为输入参数,within函数返回的是更新后的数据框对象,within函数可以在大括号中添加多个表达式,能够一次操作多个数据列:df1=within(df1,{z=c('z1','z2','z3')} )

方法4:使用plyr包中的mutate函数,该函数用于向数据框中添加数据列或转换已经存在的数据列,接受一个数据框对象,和多个”name=value“对,返回修改后的数据框对象:mutate(df1,z=c('z1','z2','z3'))

3,排序

order()函数能够对数据框进行排序,order(x)函数:返回第i个元素是x中元素在排序之后的序号,对数据框进行排序时,可以分两步进行下去,第一步获取行的序号,第二部按照行号查询数据框:> y_order=order(df1[,'y'])> df1[y_order,]

还有一个方法,使用dplyr包中的arrange函数,只用一行就能实现对数据框的排序:arrange(df1,y)

4,排名

rank()函数可以为数据框中的列进行排名,不过rank()函数只能作用于向量,只能返回向量元素的排名:rank(x, na.last = TRUE,     ties.method = c("average", "first", "last", "random", "max", "min"))

操作数据框,在数据分析中占用很大的比重,后续,我们再深入探讨。

merge r语言daframe_R语言:数据框相关推荐

  1. 在R中子集化数据框的5种方法

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 通常,我们在使用大型数据集时,只会对其中的一小部分感兴趣,用以进行特定分析. 那么,我们应该如 ...

  2. bind merge r 和join_R语言数据合并

    公众号:R语言技术交流 需要的函数 cbind(),rbind(),bind_rows(),merge() 准备数据 我们先构造一组数据,以便下面的演示 > data1 + namea=c(&q ...

  3. merge r语言daframe_R语言读取多个excel文件后合并:rbind/merge/cmd合并

    问题: 该文件夹下的三个文件理论上列名完全一致,但是在用rbind合并时却提示上述错误,(只能理解为列名确实是不一致导致的问题)解决如下: (1)首先,rbind和cbind()也适用于datafra ...

  4. bind merge r 和join_R语言中的数据合并函数(merge,cbind和rbind)的使用

    R语言中的数据合并函数(merge,cbind和rbind)的使用-R语言中用cbind() 和rbind() 构建分块矩阵 1.merge函数 两个数据框拥有相同的时间或观测值,但这些列却不尽相同. ...

  5. merge r语言daframe_R语言总结

    R语言总结 数据框操作(plyr包) 辅助小函数 1 splat函数: 作用:把原函数中多个参数打包为一个list作为参数,然后输出新的函数.也就是说本来某个函数需要输入多个参数,现在套上splat后 ...

  6. R语言数据结构之数据框

    数据框是特殊的二维列表.数据框每一列都有一个唯一的列名,长度都是相等的,同一列的数据类型需要一致,不同列的数据类型可以不一样. data.frame(..., row.names = NULL, ch ...

  7. R语言学习笔记--数据框输出和查看

    (1)将数据框C输出为.csv文件 write.table(C,file="ABC.csv",sep = ",",row.names=FALSE)     #A ...

  8. dataframe 添加一行_R语言Data Frame数据框常用操作

    来源 | R友舍 Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列 ...

  9. bind merge r 和join_R语言并行读取csv:地表最快csv合并方法

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  10. R 返回元素在数据框或者向量中的位置?

    利用 which( object == target ) 语句 a <- c('a','b','c','d','e') which(a == 'a') 对于dataframe(数据框) 数据框来 ...

最新文章

  1. VS IISExpress REST DELETE 405 Method Not Allowed
  2. CentOS 7 更换 yum 源
  3. Linux中查询显卡硬件的几种命令(记录)
  4. Drools可执行模型还活着
  5. [渝粤教育] 中国地质大学 嵌入式操作系统 复习题 (2)
  6. db2 某个字段排序_MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...
  7. c语言网页版在线编译器_C语言编译器IDEapp下载-C语言编译器IDE官方版下载v1.5.1 安卓版...
  8. 复练-关于面试的技能树-自信从容的参加面试
  9. Gogs clone仓库地址为localhost
  10. windows完全卸载MySql数据库
  11. 项目开发-文档-软件需求规格说明书模板文档命名规则及格式要求(免费下载链接)
  12. 台式计算机前面插耳机没声音,Win10台式机机箱前置耳机插孔没声音如何修复
  13. 五子棋AI算法(二)
  14. 基于Python的开源人脸识别库:离线识别率高达99.38%(转)
  15. 关闭445端口操作手册
  16. 功能测试主要做什么?
  17. 如何删除07版word页眉页脚的横线
  18. u盘安装linux系统有什么弊端,使用U盘安装Linux系统的经验总结
  19. 名帖204 蔡襄 行书《行书帖选》
  20. “城市大脑”治城一年 杭州“变”了

热门文章

  1. oracle字符串转日期比较大小写,【varchar】oracle中比较日期大小日期定义的是varchar2类型的......
  2. 二分类数据集_玩转UCI心脏病二分类数据集 领学课笔记
  3. NYOJ题目106-背包问题(贪心)
  4. 机器学习:监督学习、无监督学习、强化学习
  5. SLAM学习------Sophus模板类的安装和使用
  6. matlab绘制等间距同心圆,CDR做出等距离的同心圆的四种方法
  7. python中3个while循环_python的input和while循环
  8. android studio 第一个画面设定,2.3 使用Android Studio 简单设计UI界面
  9. 创建Oracle本地数据库详细步骤,Oracle-创建本地数据库
  10. 以下不是python内置函数的是_Python内置函数