设为首页 加入收藏

TOP

R 语言的Dataframe常用操作(二)
2019-08-15 00:09:30 】 浏览:278
Tags:语言 Dataframe 常用 操作
,]  #只访问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的学生的信息该怎么办呢?

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

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

> 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
> myarrayframe <- as.data.frame(myarray)
> myarrayframe
   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
> is.data.frame(myarray)
[1] FALSE
> is.data.frame(myarrayframe)
[1] TRUE

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

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

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

> 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
> mydataframe["C4"]
   C4
R1 13
R2 14
R3 15
R4 16
> mean(mydataframe["C4"])
[1] NA
Warning 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 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
> x <- myarray[,3] #读取第3列的值
> x
R1 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
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Bagging(R语言实现)—包外错误率.. 下一篇R语言的数据输入

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目