R语言的Dataframe常用操作使用

本文将结合实例代码,介绍R语言的Dataframe常用操作使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

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

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

 Usage data.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 C5 R1  1  5  9 13 17 R2  2  6 10 14 18 R3  3  7 11 15 19 R4  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 C5 R1  1  5  9 13 17 R2  2  6 10 14 18 R3  3  7 11 15 19 R4  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 scores 1      2014  小明     英语     87 2      2015  小红     英语     98 3      2016  小兰     英语     93 

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

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

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

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

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

 > attach(Result) The following objects are masked _by_ .GlobalEnv: names, scores, StudentID, subjects The 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 age 1      2014  小明     英语     87  12 2      2015  小红     英语     98  14 3      2016  小兰     英语     93  13 > Result2 <- Result[-2]  #删除name列 > Result2 StudentID subjects scores age 1      2014     英语     87  12 2      2015     英语     98  14 3      2016     英语     93  13 

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

 > Resu

以上就是R语言的Dataframe常用操作使用的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » R语言