美文网首页
R语言笔记Day1(二 数据框、矩阵和列表)

R语言笔记Day1(二 数据框、矩阵和列表)

作者: 养猪场小老板 | 来源:发表于2020-01-12 15:25 被阅读0次

数据框、矩阵和列表

向量.png 矩阵.png
数据框.png 列表.png

1.数据框

1.1 来源

(1)在R中新建
(2)由已有数据转换或处理得到
(3)从文件中读取
(4)内置数据集

1.2 新建与读取数据框

options(stringsAsFactors = FALSE)#在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式
新建方式1
df <- data.frame(gene = c("gene1","gene2","gene3"),#gene,sam,exp是列名
                 sam  = c("sample1","sample2","sample3"),
                 exp  = c(32,34,45))
df
新建方式2
df <- data.frame(gene  = paste0("gene",1:3),
                 sam   = paste0("sample",1:3),
                 exp   = c(32,34,45))
df
读取
df2 <- read.csv("gene.csv")
df2

1.3 数据框属性的描述

1) 维度;dim(行,列)nrow/ncol
> dim(df)
[1] 3 3
2)行、列名;rownames(df)/colnames(df)
> rownames(df)
[1] "1" "2" "3"
> colnames(df)
[1] "gene" "sam"  "exp" 
2)数据框取子集
# 一个维度是一个向量,向量取子集:e.g.  x[5]
# 数据框取子集:x[3,5],这表示数据框x内的[第三行,第五列]

1.4.数据框取子集;一个维度为一个向量

#1)定点
> df[2,2]
[1] "sample2"
#2)定行
> df[2,]
   gene     sam exp
2 gene2 sample2  34
#3)定列
> df[,2]
[1] "sample1" "sample2" "sample3"
#4)隔着取
> df[c(1,3),1:2]#因为是每个维度都是向量,且向量不相隔,所以c(1,3)
  gene     sam
1 gene1 sample1
3 gene3 sample3
#5)根据行名或列名取子集
#当行数和列数很多时,这个操作就很有用
> df[,"gene"]
[1] "gene1" "gene2" "gene3"
> df[,c('gene','exp')]
   gene exp
1 gene1  32
2 gene2  34
3 gene3  45
# 6)进阶,提取或者删除最后一行/列
> ncol(df)
[1] 3
> df[,ncol(df)]   #提取最后一列
[1] 32 34 45
> df[,-ncol(df)]  #删除最后一列
   gene     sam
1 gene1 sample1
2 gene2 sample2
3 gene3 sample3
# 7)提取列的常用操作
> df$exp   #符号$,按Tab键选中
[1] 32 34 45
# 8)能对向量进行的计算和统计,都能对df$exp做
• max(df$exp) 最大值
• min(df$exp) 最小值
• range(df$exp) 数值的范围
• mean(df$exp) 均值
• median(df$exp) 中位数
• var(df$exp) 方差
• sd(df$exp) 标准差
• length(df$exp) 长度
• sum(df$exp) 总和

1.5 数据框编辑

#编辑方式:取子集$或[] +赋值操作
a.修改数据
1)改一个格
> df[3,3]<- 5
> df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3   5
2)改一整列
> df$exp<-c(12,23,50);df
   gene     sam exp
1 gene1 sample1  12
2 gene2 sample2  23
3 gene3 sample3  50
3)直接增加一列
> df$abc <-c(23,15,37);df
   gene     sam exp abc
1 gene1 sample1  12  23
2 gene2 sample2  23  15
3 gene3 sample3  50  37
b.修改行/列名称
> rownames(df)
[1] "1" "2" "3"
> colnames(df)
[1] "gene" "sam"  "exp"  "abc"
> rownames(df) <- c("r1","r2","r3")   #行名
> rownames(df)
[1] "r1" "r2" "r3"
> df
    gene     sam exp abc
r1 gene1 sample1  12  23
r2 gene2 sample2  23  15
r3 gene3 sample3  50  37
> rownames(df)[2] = "x"   #注意该结构
> df
    gene     sam exp abc
r1 gene1 sample1  12  23
x  gene2 sample2  23  15
r3 gene3 sample3  50  37
  • 练习题

1.读取excise.csv,赋值给df。
> df=read.csv("excise.csv")
> df
     gene          s1          s2         s3
1   gene1 -0.02258879  0.96133416 -1.1586647
2   gene2 -1.74022070 -0.88615577  0.2377606
3   gene3 -1.31557781  1.43889437  0.8751975
4   gene4 -0.07796823 -1.03993791  0.5053183
5   gene5 -0.60799720  0.46511225  0.4009092
6   gene6 -0.58853428 -0.05467347 -0.4162721
2.提取行名和列名
> rownames(df)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13"
[14] "14" "15"
> colnames(df)
[1] "gene" "s1"   "s2"   "s3" 
3.提取第二行
> df[2,]
   gene        s1         s2        s3
2 gene2 -1.740221 -0.8861558 0.2377606
4.提取第3行第4列
> df[3,4]
[1] 0.8751975
5.求第二列最大值和最小值
> max(df[,2]) #最大值
[1] 2.14664
> min(df[,2])  #最小值
[1] -1.819106
> range(df[,2])  #极值
[1] -1.819106  2.146640
6.按照列名提取s1,s3列
> df[,c("s1","s3")]
            s1         s3
1  -0.02258879 -1.1586647
2  -1.74022070  0.2377606
3  -1.31557781  0.8751975
4  -0.07796823  0.5053183
5  -0.60799720  0.4009092
6  -0.58853428 -0.4162721
7.修改后三列列名为“sample1”,“sample2”,“sample3”
方法一:直接赋值
> colnames(df) <- c("gene","sample1","sample2","sample3") #应该有更好的办法
> colnames(df)
[1] "gene"    "sample1" "sample2" "sample3"
方法二:推荐这种取子集
colnames(df)[2:4] <- c("sample1","sample2","sample3")
> head(df)
   gene     sample1     sample2    sample3
1 gene1 -0.02258879  0.96133416 -1.1586647
2 gene2 -1.74022070 -0.88615577  0.2377606
3 gene3 -1.31557781  1.43889437  0.8751975
4 gene4 -0.07796823 -1.03993791  0.5053183
5 gene5 -0.60799720  0.46511225  0.4009092
6 gene6 -0.58853428 -0.05467347 -0.4162721
8.筛选sample3列大于0的行
> df$sample3>0
 [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
[12]  TRUE FALSE  TRUE  TRUE
> df$sample3[df$sample3>0]
 [1] 0.2377606 0.8751975 0.5053183 0.4009092 0.3391273 0.1525497
 [7] 0.3251973 0.3016595 0.6108655 0.1627136 0.9300770

1.6 数据的进阶

(1) 转置--行变列,列变行: t(df)
> df1=read.csv("gene.csv")
> df1
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> t(df1)
     [,1]      [,2]      [,3]     
gene "gene1"   "gene2"   "gene3"  
sam  "sample1" "sample2" "sample3"
exp  "32"      "34"      "45" 
(2)去除含有缺失值的行: na.omit(df)
> df2=read.csv("na.omit.csv")
> df2
  x1 x2
1  A  1
2  B NA
3  C  3
4     4
5  E  5
> na.omit(df2)# 按行删除;仅按照某一列来去除缺失值、缺失值替换: tidyr包
  x1 x2
1  A  1
3  C  3
4     4
5  E  5
(3)两个表格的连接:
#交集、并集、补集、全集等,参照dplyr包
按列连接: cbind   行数相同
按行连接: rbind   列数相同
merge()   根据某一相同列合并
如下图所示
(4)行数较多的数据框可截取前/后几行查看
> head(df)
   gene     sample1     sample2    sample3
1 gene1 -0.02258879  0.96133416 -1.1586647
2 gene2 -1.74022070 -0.88615577  0.2377606
3 gene3 -1.31557781  1.43889437  0.8751975
4 gene4 -0.07796823 -1.03993791  0.5053183
5 gene5 -0.60799720  0.46511225  0.4009092
6 gene6 -0.58853428 -0.05467347 -0.4162721
> df[1:3,1:3]
   gene     sample1    sample2
1 gene1 -0.02258879  0.9613342
2 gene2 -1.74022070 -0.8861558
3 gene3 -1.31557781  1.4388944

(6) 查看每一列的数据类型和具体内容
> str(df)
'data.frame':   15 obs. of  4 variables:
 $ gene   : chr  "gene1" "gene2" "gene3" "gene4" ...
 $ sample1: num  -0.0226 -1.7402 -1.3156 -0.078 -0.608 ...
 $ sample2: num  0.961 -0.886 1.439 -1.04 0.465 ...
 $ sample3: num  -1.159 0.238 0.875 0.505 0.401 ...
(7)如果列名顺序错乱,如何按照指定顺序重排?
#上一期可以讲过了

(8)总结一些函数
t()   #转置
head(),tail() #截取头/ 尾
cbind(),rbind(),merge()   #连接
str()  #查看详情

顺序重排链接

黄cbind按列+蓝rbind按行.png
merge.png

1.7 矩阵、列表新建和取子集

1)矩阵新建
> m <- matrix(1:9, nrow = 3)
> m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
取子集
> m[1,3]
[1] 7
> m[,2]
[1] 4 5 6
> m[3,]
[1] 3 6 9
> m[1:2,2:3]
     [,1] [,2]
[1,]    4    7
[2,]    5    8
2)列表新建
> i <- list(m=matrix(1:9, nrow = 3),df=data.frame(gene=paste0("gene",1:3),sam=paste0("sample",1:3),exp=c(32,34,45)),x=c(1,3,5))

表达一
> i
$m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45

$x
[1] 1 3 5
> i[1]
表达二
> i[2]
$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> i[[2]]
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
> i$df
   gene     sam exp
1 gene1 sample1  32
2 gene2 sample2  34
3 gene3 sample3  45
  • 删除函数

  • 删除一个 rm(l)
  • 删除多个 rm(df,m)
  • 删除全部 rm(list = ls())
  • 清空控制台 ctrl+l
新建 取子集
向量x x<-c( ) x[n] 修改元素
数据框df df<-data.frame( ) df[x,y] , df[x,] ,df[,y], $ 新增列,修改
矩阵 m m<–matrix( ) m[x,y]…
列表 l l<-list( ) l[[n]], $

1.8 元素的“名字”-names()

元素可命名,用函数names()
可根据名字提取子集,
向量、数据框、列表通用。
> x = c(1,3,5);x
[1]1 3 5
> names(x) = c("a","b","c")
> x
a b c
1 3 5

相关文章

  • R语言笔记Day1(二 数据框、矩阵和列表)

    数据框、矩阵和列表 1.数据框 1.1 来源 (1)在R中新建(2)由已有数据转换或处理得到(3)从文件中读取(4...

  • R语言基础之数据结构

    基础数据结构 R语言中主要有向量(vector),矩阵(matrix),列表(list),数据框(data fra...

  • 学习小组Day5笔记--小明

    R语言数据结构 数据类型 -向量-矩阵-数组-数据框-列表 知识点,与python相比 1.注意赋值方式2.r中同...

  • Day5 数据结构学习——曹婕

    今天主要学习了R下数据结构的相关知识,主要包括向量、矩阵、数组、数据框、列表等。《R语言实践第二版》中有一张图较为...

  • 学习小组Day5笔记——四海

    R语言第二天——R基础 数据类型 向量 vector* #重要 矩阵 matrix 数组 array 数据框 da...

  • R语言学习笔记——列表

    列表是R语言数据结构中最复杂的一种。列表是各种对象的有序集合,向量、矩阵、数据框等都可以包含进来。 如: > a ...

  • R语言数据结构-向量

    R语言数据结构主要有以下四种: 1.向量2.数据框3.矩阵4.列表 最好理解的是数据框,数据框约等于“表格” 第一...

  • 一周复盘汇总

    本周收获 课题思路设计并修正 论文返修完成 生信清洗数据处理批次效应 生信R语言处理列表-数据框-矩阵 ...

  • R语言实战---第2章

    2.2 数据结构 R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。 2.2.1 向量 ...

  • 学习小组Day5笔记--尤少林

    R语言的简单使用 数据类型:向量,矩阵,数组,数据框,列表 向量1.1.向量的赋值;向量的四种赋值1.2. 从向量...

网友评论

      本文标题:R语言笔记Day1(二 数据框、矩阵和列表)

      本文链接:https://www.haomeiwen.com/subject/qheiactx.html