iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >R语言的Dataframe常用操作方法
  • 519
分享到

R语言的Dataframe常用操作方法

2023-06-20 13:06:09 519人浏览 安东尼
摘要

这篇文章主要讲解了“R语言的Dataframe常用操作方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言的Dataframe常用操作方法”吧!上节我们简单介绍了Dataframe的定义

这篇文章主要讲解了“R语言的Dataframe常用操作方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言的Dataframe常用操作方法”吧!

上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作

首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下data.frame( )的具体用法:

Usagedata.frame(..., row.names = NULL, check.rows = FALSE,           check.names = TRUE, fix.empty.names = TRUE,           stringsAsFactors = default.stringsAsFactors())default.stringsAsFactors()Arguments... :these arguments are of either the fORM value or tag = value. Component names are created based on the tag (if present) or the deparsed argument itself.row.names :NULL or a single integer or character string specifying a column to be used as row names, or a character or integer vector giving the row names for the data frame.

当然,后面还有很多参数的具体用法,在此不做一一赘述,主要用到的就是前两个。首先,“...”代表了表格数据,就是要构成数据框的数据主体,row.names( )为要构成数据框的行名,那么既然数据框相当于R语言的一个表格,应该既有行名也有列名才对,那么列名又是如何给出的呢?我们知道,很多的数据处理软件以及算法是以数据的列为单位进行的,之前我们构建矩阵的时候,默认也是按列填充(byrow=FALSE),而列名在创建数据框开始我们就已经确定好了的。详见下面代码:

我想要创建一个名为“mydataframe”的数据框,首先确定数据框里面的列有哪些,然后调用函数data.frame( )函数

> C1 <-c(1,2,3,4)> C2 <-c(5,6,7,8)> C3 <-c(9,10,11,12)> C4 <-c(13,14,15,16)> C5 <-c(17,18,19,20)> mydataframe <- data.frame(C1,C2,C3,C4,C5,row.names = c("R1","R2","R3","R4"))> mydataframe   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20

由此可见,数据框是把现有的列拼接成一个表格的一种数据结构,细心的朋友会发现,这个数据框怎么跟上节我们讲过的矩阵长得那么一样!!!再回顾一下上节的矩阵创建:

> mydata <- c(1:20)> cnames <- c("C1","C2","C3","C4","C5")> rnames <- c("R1","R2","R3","R4")> myarray <- matrix(mydata,nrow = 4,ncol = 5,dimnames = list(rnames,cnames))> myarray   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20

确实,从长相上来说分不出差别,但是矩阵里面的元素必须一致,而数据框可以是各种类型数据的集合。这种集合不是无条件乱七八糟的集合,而是以列为单位,不同列的元素类型可以不同,但是同一列的元素类型必须一致。因此,矩阵可以看做特殊的数据框类型那么这么做有什么意义呢?在数据统计中,我们需要有各种各样类型的数据,就拿简单的成绩单来说,就包含了“姓名”,“学号”,“科目”等字符型元素,也包括“分数”等数值型元素,还有“是否通过”等布尔型元素,因此,从广泛意义上来说,dataframe更具有普适性,矩阵多用在数学计算中。说归说,我们来实际创建一个数据框,然后再演示一下它的具体操作:

> names <- c("小明","小红","小兰")> StudentID <- c("2014","2015","2016")> subjects <- c("英语","英语","英语")> scores <- c(87,98,93)> Result <- data.frame(StudentID,names,subjects,scores)> Result  StudentID names subjects scores1      2014  小明     英语     872      2015  小红     英语     983      2016  小兰     英语     93

由上可见,当没有给数据框指定行名的时候,系统会默认从1开始给每行一个行号,这跟excel表格有点类似。 还是同往常一样,我们先学习dataframe数据类型的基本操作

数据框元素的访问:既然矩阵是特殊的数据框,那么矩阵元素的访问方式应该也同样适用于dataframe吗?不是这样,我们知道,数据框是以行或者列为单位(行列可以转置),因此访问元素时只能整行或者整列访问。即dataframe[1,](访问第一行),dataframe[,1](访问第一列)采用这种方式访问列时,返回值是按行排列的形式。访问列同样也可以直接使用dataframe(1)访问第一列,或者dataframe(列名)来访问指定的列。也可以连续访问若干列,详见代码:

> Result[1,] #访问第一行  StudentID names subjects scores1      2014  小明     英语     87> Result[,1] #访问第一列 [1] 2014 2015 2016Levels: 2014 2015 2016> Result[1] #访问第一列  StudentID1      20142      20153      2016> Result["names"] #访问指定标号的列  names1  小明2  小红3  小兰> Result[1:3,]  #访问1-3行  StudentID names subjects scores1      2014  小明     英语     872      2015  小红     英语     983      2016  小兰     英语     93> Result[1:3]  #访问1-3列  StudentID names subjects1      2014  小明     英语2      2015  小红     英语3      2016  小兰     英语> Result[c(1,3),]  #只访问1,3行,注意写法 c( )  StudentID names subjects scores1      2014  小明     英语     873      2016  小兰     英语     93> Result[c(1,4)]  #只访问1,4列,注意写法 c( )  StudentID scores1      2014     872      2015     983      2016     93> Result[c("names","scores")]  #只访问names和scores列,注意写法 c( )  names scores1  小明     872  小红     983  小兰     93

 由上可得:对数据框操作,必须以向量为单位,使用c( ) or list( ),通过上述了解,我们发现,普通的访问必须带着行名和列名,这有的时候给我们带来不必要的麻烦,比如我要计算成绩平均值,带上列名Score会给我们带来一些困惑,于是有哪些方法可以在访问数据库元素时不带着行名或者列名呢?

方法一:用attach和detach函数,比如要打印所有names,那么可以写成:

> attach(Result)The following objects are masked _by_ .GlobalEnv:    names, scores, StudentID, subjectsThe following objects are masked from Result (pos = 3):    names, scores, StudentID, subjects> name <- names> score <-scores> detach(Result)> name[1] "小明" "小红" "小兰"> score[1] 87 98 93> mean(score)[1] 92.66667

方法二:用with函数

> with(Result,{score <- scores})> score[1] 87 98 93

上面谈到了dataframe的创建和读取,如果我需要添加或者删除某一列该怎么办呢?

> Result$age<-c(12,14,13)  #添加age列> Result  StudentID names subjects scores age1      2014  小明     英语     87  122      2015  小红     英语     98  143      2016  小兰     英语     93  13> Result2 <- Result[-2]  #删除name列> Result2  StudentID subjects scores age1      2014     英语     87  122      2015     英语     98  143      2016     英语     93  13

 如果我需要查询成绩等于98的学生的信息该怎么办呢?

> Result[which(Result$scores==98),]  StudentID names subjects scores age2      2015  小红     英语     98  14

上面说过了,矩阵和数据框也是两种不同的数据类型,我们知道数据类型之间可以互相转换,用is.***( )可以判断某个变量是否为***类型,用as.***( )则将某个变量转换为***类型。那么相应的,矩阵转换为数据框类型则应为:

> myarray   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20> myarrayframe <- as.data.frame(myarray)> myarrayframe   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20> is.data.frame(myarray)[1] FALSE> is.data.frame(myarrayframe)[1] TRUE

跟矩阵matrix操作一样,数据框也有rbind和cbind函数,用法大致相同,有兴趣的朋友可以简单联系一下,这里不再赘述。

最后,我们来谈一下数据框数据处理操作:

上面我们讲到,利用dataframe[ 列号 ]或者dataframe[ 列值 ]可以读取数据框的某一列,返回值仍为数据框类型,但是这部分数据不方便直接利用我们之前讲过的求和,求平均值等方法进行计算分析,因为读取的数据带有“行名/列名”,这个为字符型变量。有的人会问,我在创建数据框的时候,不加行名和列名不就行了?第一,在创建数据框的时候,会默认给你分配行名或者列名,第二,就算不分配行名或者列名,那数据框创建起来还有什么意义?

> mydataframe   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20> mydataframe["C4"]   C4R1 13R2 14R3 15R4 16> mean(mydataframe["C4"])[1] NAWarning message:In mean.default(mydataframe["C4"]) : 参数不是数值也不是逻辑值:回覆NA> is.data.frame(mydataframe["C4"])[1] TRUE

方法一:将数据框格式重新转化为矩阵格式,然后按照矩阵索引的方式来找寻要处理的数据组,利用矩阵或者向量中相关函数来进行一定的数据处理。

> myarray2 <- as.matrix(mydataframe)> is.matrix(myarray2)[1] TRUE> myarray2   C1 C2 C3 C4 C5R1  1  5  9 13 17R2  2  6 10 14 18R3  3  7 11 15 19R4  4  8 12 16 20> x <- myarray[,3] #读取第3列的值> xR1 R2 R3 R4 9 10 11 12> is.vector(x) #查看x是否为向量类型[1] TRUE> mean(x)[1] 10.5> sum(x)[1] 42

方法二:在读取数据框列的时候换用另外一种方法,dataframe$(行名或者列名),返回值是vector类型

> c <- mydataframe$C3> c[1]  9 10 11 12> is.vector(c)[1] TRUE> mean(c)[1] 10.5> sum(c)[1] 42

同时,也可以利用dataframe$(新的列名) <- 新的向量,来给dataframe添加新的列,具体操作如下:

> mydataframe$sum <- mydataframe$C1 +mydataframe$C4> mydataframe$mean <- (mydataframe$C1+mydataframe$C4)/2> mydataframe   C1 C2 C3 C4 C5 sum meanR1  1  5  9 13 17  14    7R2  2  6 10 14 18  16    8R3  3  7 11 15 19  18    9R4  4  8 12 16 20  20   10

最推崇的是下一种方法,直接利用transform函数组建新的数据框,具体用法如下:

> x1 <- mydataframe$C1> x2 <- mydataframe$C3> mydataframe2 <- transform(mydataframe,sum2=x1+x2,mean2=(x1+x2)/2)> mydataframe2   C1 C2 C3 C4 C5 sum mean sum2 mean2R1  1  5  9 13 17  14    7   10     5R2  2  6 10 14 18  16    8   12     6R3  3  7 11 15 19  18    9   14     7R4  4  8 12 16 20  20   10   16     8

感谢各位的阅读,以上就是“R语言的Dataframe常用操作方法”的内容了,经过本文的学习后,相信大家对R语言的Dataframe常用操作方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: R语言的Dataframe常用操作方法

本文链接: https://www.lsjlt.com/news/296666.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言的Dataframe常用操作方法
    这篇文章主要讲解了“R语言的Dataframe常用操作方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言的Dataframe常用操作方法”吧!上节我们简单介绍了Dataframe的定义...
    99+
    2023-06-20
  • R语言的Dataframe常用操作使用
    上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作 首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下d...
    99+
    2024-04-02
  • R语言中data.frame的常用操作总结
    前言:近段时间学习R语言用到最多的数据格式就是data.frame,现对data.frame常用操作进行总结,其中函数大部分来自dplyr包,该包由Hadley Wickham所作,...
    99+
    2024-04-02
  • R语言操作文件的方法什么
    这篇文章主要介绍“R语言操作文件的方法什么”,在日常操作中,相信很多人在R语言操作文件的方法什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”R语言操作文件的方法什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • R语言:排序的应用操作
    工作中遇到过许多看起来挺复杂的数据筛选,本质上都可以用排序解决,这里以R自带的mtcar数据集为例做一个记录。 首先简单介绍一下mtcar数据集,mtcar(Motor Trend ...
    99+
    2024-04-02
  • R语言操作文件方法详解教程
    目录1. 文件与文件夹列表的读取2. 新建文件与文件夹3. 文件与文件夹的删除4. 查看文件与文件夹是否存在小练习由于最近在处理一些真实数据时涉及到嵌套的 .tar.gz 文件的解压...
    99+
    2024-04-02
  • c语言简单实现文件 r/w 操作方法
    数据的输入和输出几乎伴随着每个 C 语言程序,所谓输入就是从“源端”获取数据,所谓输出可以理解为向“终端”写入数据。这里的源端可以是键盘、鼠标、硬盘、光盘、扫描仪等输入设备,终端可以...
    99+
    2024-04-02
  • Pandas中DataFrame常用操作指南
    目录前言1. 基本使用:2. 数据select, del, update。3.运算。4. Group by 操作。5. 导出到csv文件总结前言 Pandas是Python下一个开源...
    99+
    2024-04-02
  • R语言向量下标操作
    向量下标即元素在向量中的位置,在实践中我们可以利用下标(元素的位置)来找出自己想要的数。 利用runif函数生成包含10个正整数的向量x。 options(digits = 1)...
    99+
    2024-04-02
  • R语言中的五种常用统计分析方法
    1、分组分析aggregation 根据分组字段,将分析对象划分为不同的部分,以进行对比分析各组之间差异性的一种分析方法。 常用统计指标: 计数 length 求和 sum 平均值 ...
    99+
    2024-04-02
  • go语言操作es的方法
    这篇文章主要介绍“go语言操作es的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言操作es的方法”文章能帮助大家解决问题。Elasticsearch介绍Elasticsearch(ES)...
    99+
    2023-06-30
  • r语言异常值处理的方法是什么
    在R语言中,可以使用以下方法来处理异常值:1. 箱线图(boxplot):使用箱线图可以直观地识别异常值。可以使用`boxplot(...
    99+
    2023-09-14
    r语言
  • Go语言time包的时间常用操作方法有哪些
    本篇内容主要讲解“Go语言time包的时间常用操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言time包的时间常用操作方法有哪些”吧!Now():获取当前本地的时间impor...
    99+
    2023-07-04
  • R语言绘图大小设定的操作
    图片大小设定 x = c(1:10) y = c(11:20) par(pin = c(5,3))#pin()函数控制图形的尺寸 plot(x = x, y = y) x...
    99+
    2024-04-02
  • R语言seq()函数的调用方法
    看到有很多读者浏览了这篇文章,心里很是开心,为了能够更好地帮助大家,决定再修改一下,帮助大家更好地理解。 --------修改于:2018年4月28日 为了方便大家在开发环境中直接实...
    99+
    2024-04-02
  • R语言常用两种并行方法之parallel详解
    目录并行计算在模拟时什么地方可以用到并行?怎么在R中看我们可以使用并行?parallel(简单)由于最近在进行一些论文的模拟,所以尝试了两种并行的方法:parallel与snowfa...
    99+
    2024-04-02
  • R语言常用两种并行方法之snowfall详解
    上一篇博客(R中两种常用并行方法之parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定。很多时候我们将大量的...
    99+
    2024-04-02
  • R语言对Web数据操作实例
    许多网站提供数据供其用户使用。 例如,世界卫生组织(WHO)以CSV,txt和XML文件的形式提供健康和医疗信息的报告。 使用R语言程序,我们可以从这些网站以编程方式提取特定数据。 ...
    99+
    2024-04-02
  • R语言实现操作MySQL数据库
    用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源。用R操作MySQL数据库,可以说是数据分析师必备的技能了,本文介绍RMySQL包,可以在R语言中对数据...
    99+
    2024-04-02
  • 利用R语言绘制时间序列图的操作
    数据 GDP.csv文件,存储1879~2019年河南省GDP数据 绘图 # 读取数据, 首先将excel 格式的转化为 csv 格式 再读取 h <- read.tab...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作