前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R基础-3

R基础-3

原创
作者头像
大胖橘
发布2023-03-13 13:55:54
8920
发布2023-03-13 13:55:54
举报
文章被收录于专栏:R语言 / Linux

数据结构

3 数据框、矩阵和列表

之前学过的,Vector向量是 一维的

数据框、矩阵和列表如下:

1)现在学“表格” 二维:二维有两个:(1)matix 矩阵 —— 二维,只允许一种数据类型。(2)data.frame 数据框—— 二维,每列只允许一种数据类型(列与列之间相不相同都行)。

2)list列表:可装万物。

只看外观的话没法判断是个什么数据结构,要判断的话有两种方式:(1)根据生成它的函数;(2)用 class 或 is 族函数判断。那么为什么非要区分数据结构类型呢?因为不同的数据结构的应用场景不一样,比如有些函数的输入数据仅支持数据框,有些仅支持矩阵。

3.1 数据框来源

(1)用代码新建

(2)由已有数据转换或处理得到

(3)读取表格文件

(4)R语言内置数据

3.2 新建数据框(数据框是以列为单位组织的)

3.2.1  用代码新建

代码语言:javascript
复制
data.frame  #新建数据框的一个函数,内部的代码分成了两大半。
>df1 <-data.frame(gene = paste0("gene",1:4),
                  change = rep(c("up","down"),each = 2),
                  score = c(5,3,-2,-4))

可以R中跑一次上面的代码看看,gene change score是列的名字,后面的代码是形成列的内容的代码。

3.2.2 从文件中读取

代码语言:javascript
复制
>df2<- read.csv("gene.csv")

3.3 数据框属性(数据框严格区分 “行” 和 “列”)

代码语言:javascript
复制
 #写上注释
> dim(df1)  #维度  
> nrow(df1)   #行
> ncol(df1)   # 列
代码语言:javascript
复制
> rownames(df1)  #行名
> colnames(df1)  #列名

3.4 数据框取子集:$ 、[ ] 、按照名字、按条件(逻辑值)

代码语言:javascript
复制
按照1列取  df1$
> df1$score   #删掉score,按Tab键试试。这是自动补齐。现在相当于一个向量了。
代码语言:javascript
复制
#按照坐标取
> df1[2,2]    #取了第2行第2列。
> df1[2, ]    #取了第2行,输出的是一个数据框
> df1[ ,2]    #取了第2列 ,输出的是一个向量。因为这一列的数据类型必须是一样的。
> df1[c(1,3),1:2]

中括号里的逗号,表示维度的分割。

代码语言:javascript
复制
#按照名字,按照这种方式可以一次提取两列。但是 $ 自动补齐不可以
>df1[,"gene"]
> df1[,c("gene","change")]
代码语言:javascript
复制
#按条件(逻辑值)  挑选score>0 的行
> df1[df1$score>0,]  #这是按照行取的,整行提取,没有对列做任何事情。逻辑值符合的条件是score一列大于0被保留下来。
#思考?筛选score>0的基因?
> df1[df1$score>0,1]      #这是数据框取子集
或者
>df1$gene[df1$score>0]    #这是向量取子集 ,相当于y[x>0]

代码思维

代码语言:javascript
复制
#如何取数据框的最后一列?
>df1[,ncol(df1)]
#如何取数据框除了最后一列以外的的其他列?
> df1[,-ncol(df1)]       # - 有反选的意思

3.5 数据框修改

代码语言:javascript
复制
#改一个格
> df1[3,3]<-5
> df1
#改一整列
> df1$score<- c(12,23,50,2)
> df1
#加一列
>df1$p.value<- c(0.01,0.02,0.07,0.05)    #这个列的名字之前的里面没有
>df1
代码语言:javascript
复制
#行名和列名的修改,也就是向量的修改
>rownames(df1)<- c("r1","r2","r3","r4")   #修改全部行名
> colnames(df1)[2] <-"CHANGE"             #改一个列名,比如修改第二列的列名,就是修改【列明这个向量】的第二个元素。

3.6 两个数据框的连接

代码语言:javascript
复制
>merge(test1,test2,by="name")   #name是共同一列的列名。必须是个列名。
#思考,共同列的列名不相同,怎么连接?
> merge(test1,test3,by.x="name",by.y="NAME")    #但是要注意,一定要对应,test1是x,test3是y。

记忆卡片

数据框的来源            新建、转换、读取、内置

属性                          dim  rownames  colnames

取子集                      $取列 / [行,列]            行列名/行列号、逻辑值

修改/新增                 取子集+赋值

两表相连                  merge

矩阵新建和取子集

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据结构
    • 3 数据框、矩阵和列表
      • 3.1 数据框来源
        • 3.2 新建数据框(数据框是以列为单位组织的)
          • 3.2.1  用代码新建
          • 3.2.2 从文件中读取
        • 3.3 数据框属性(数据框严格区分 “行” 和 “列”)
          • 3.4 数据框取子集:$ 、[ ] 、按照名字、按条件(逻辑值)
            • 3.5 数据框修改
              • 3.6 两个数据框的连接
                • 记忆卡片
                  • 矩阵新建和取子集
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档