美文网首页
2020-11-20R语言入门笔记(2)矩阵,数据框,列表

2020-11-20R语言入门笔记(2)矩阵,数据框,列表

作者: 呆呱呱 | 来源:发表于2020-11-23 09:34 被阅读0次
    #11.19
    
    x <- sample(1:100,78)
    x
    
    
    #矩阵
    matrix(x,nrow=7)    #把一个向量变成一个矩阵
    
    x1=sample(1:100,7)
    x2=11:17;x2
    x3=sample(1:10,7)
    x3
    #多个向量变成矩阵是有要求的:1,长度相同2,类型相同
    cbind(x1,x2,x3)  #把多个向量变成矩阵;多个向量变成矩阵是有要求的:1,长度相同2,类型相同
    
    
    
    #数据框
    y1=sample(1:100,7)
    y2=letters[1:7]
    y3=sample(1:10,7)
    data.frame(y1,y2,y3)
    #拼成数据框的要求就是:长度相同,数据表类型不同(可以不同)
    
    
    
    #list:长度可以不同,数据类型可以不同
    
    
    
    
    
    #抽样的意思,1到100里面取8个数
    #重点:数据框
    
    #1.数据框来源
    # (1)在R中新建
    # (2)由已有数据转换或处理得到
    # (3)从文件中读取
    # (4)内置数据集
    
    
    #2.新建和读取数据框
    options(stringsAsFactors = F)
    #options表示设置,不要将里面的字符串强制转变为因子
    
    df <- data.frame(gene = c("gene1","gene2","gene3"),
                     sam  = c("sample1","sample2","sample3"),
                     exp  = c(32,34,45))
    df
    df <- data.frame(gene  = paste0("gene",1:3),
                     sam   = paste0("sample",1:3),
                     exp   = c(32,34,45))
    df
    
    df2 <- read.csv("gene.csv")   #读取csv函数
    #如果读取这个代码报错了,说明没有放在工作目录
    df2
    
    
    
    
    #3.数据框属性描述
    #
    dim(df)  #维度(告诉你有几行几列)
    nrow(df)  #row是行
    ncol(df) #ncol是列
    #
    rownames(df)  #行名
    colnames(df)  #列名
    
    
    
    
    # 练习3-1
    # 1.新建图示数据框,赋值给test1
    # (提示:后三列是用函数生成的随机数,
    #   数值不必完全和我截图的相同)
    
    test1<- data.frame(gene = paste0("gene",1:15),
                     s1  = sample(1:100,15),
                     s2  = sample(1:100,15),s3  = sample(1:100,15))
    test1
    
    
    # 2.读取excise.csv这个文件,赋值给test2。
    test2 <- read.csv("excise.csv")   #只要是在工作目录下,就可以读取的
    test2
    
    
    # 3.使用函数,查看test2的列名。##返回值是向量
    rownames(test2)  #行名
    colnames(test2)
    
    
    # 4.使用函数,查看test2的行数和列数。  #返回值是数值。
    nrow(test2)  #row是行
    ncol(test2) #ncol是列
    
    
    
    #4.数据框取子集
    df[2,2]  #取第二行第二例。逗号左边是行,右边是列
    df[2,]   #取第二行
    df[,2] #取第二列
    df[c(1,3),1:2]  #中括号里面的逗号,是唯独的分隔,左边是行右边是列
    
    df[,"gene"]
    df[,c('gene','exp')]
    
    df$exp  ##读取exp这一列的数据
    #删掉exp,按tab键试试
    ncol(df)
    
    mean(df$exp)
    df
    
    
    #5.数据框编辑
    
    #改一个格
    df[3,3]<- 5
    #改一整列
    df$exp<-c(12,23,50)     
    #新增abc这一列,并且赋值
    df$abc <-c(23,15,37) 
    df
    #改行名和列名
    rownames(df) <- c("r1","r2","r3")
    df
    colnames(df) <- c("r1","r2","r3")
    df
    #只修改某一行/列的名
    rownames(df)[2]="x"
    df
    
    # 练习3-2
    # 1. test = read.csv(“excise.csv”),提取test的第二行
    test2 <- read.csv("excise.csv")   #只要是在工作目录下,就可以读取的
    test2
    test2[2,]
    # 2.提取第3行第4列
    test2[3,4]
    # 3.求第二列数值的中位数
    median(test2$s2)
    # 4.按照列名,同时提取s1,s3两列。
    test2[,c(2,4)]
    test2[,c("s1","s3")]
    # 5.修改后三列的列名为“sample1”,“sample2”,“sample3”!!!!!!!!!!!!!!!!!!!!!
    colnames(test2)[2:4]
    colnames(test2)[2:4]<- c("sample1","sample2","sample3")
    # 6.提取sample3列数值大于0的所有行??????????不懂啊不懂啊
    test2$sample3
    test2$sample3>0
    test2[test2$sample3>0,]
    #6.数据框进阶
    
    #(1)行数较多的数据框可截取前/后几行查看
    iris
    head(iris)  #默认返回六行
    head(iris,3)
    tail(iris)  #查看数据框后几行
    #(2)行列数都多的数据框可取前几行前几列【查看】
    iris[1:3,1:3] #不经过赋值,就只是输出、看看
    
    #(3) 查看每一列的数据类型和具体内容
    str(df)
    str(iris)
    #(4)如果列名顺序错乱,如何按照指定顺序重排?
    #https://mp.weixin.qq.com/s/rA92iZS8HUiuwlyrPirHdA
    
    #(5)去除含有缺失值的行
    na.omit(df)  #吞掉NA
    
    #生成一个有NA的数据框
    df<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
    df
    df[2,2] <- NA
    df[4,1] <- NA
    df
    
    
    
    #(6)两个表格的链接
    #cbind 按照“列”连接——————行数相同
    #rbind 按照“行”连接———————列数相同
    
    
    
    
    test1 <- data.frame(name = c('jimmy','nicker','doodle'), 
                        blood_type = c("A","B","O"))
    test1
    test2 <- data.frame(name = c('doodle','jimmy','nicker','tony'),
                        group = c("group1","group1","group2","group2"),
                        vision = c(4.2,4.3,4.9,4.5))
    test2 
    
    test3 <- data.frame(NAME = c('doodle','jimmy','lucy','nicker'),
                        weight = c(140,145,110,138))
    tmp  =merge(test1,test2,by="name")
    
    
    merge(test1,test3,by.x = "name",by.y = "NAME") 
    
    
    
    
    
    
    
    
    #####矩阵和列表
    m <- matrix(1:9, nrow = 3)
    m
    colnames(m) <- c("a","b","c") #列名
    m
    
    
    #下面取子集
    #整行
    m[2,]
    #整列
    m[,1]
    #单个格
    m[2,3]
    #多个格
    m[2:3,1:2]
    #转置和转换
    colnames(m) <- c("a","b","c")
    m
    t(m)
    as.data.frame(m)   #转换为数据框
    
    #矩阵画热图????????
    library(pheatmap)
    pheatmap::pheatmap(m)
    #列表
    l <- 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))
    l
    
    l[[2]]   #取子集
    class( l[[2]])   #有几个中括号,取出来的数据类型不一样
    
    class(l[2])
    l[2]
    l$df
    
    
    #补充:元素的名字
    #(1)向量
    x=1:10
    names(x)=letters[1:10]
    x
    x["a"]
    #(2)数据框
    df
    names(df)
    df[,"X1"]
    #(3)列表
    names(l)
    l[["df"]]
    
    #练习3-3
    #1.统计iris最后一列有哪几个重复值,分别重复了多少次
    iris[,5]
    unique(iris[,5])
    table(iris[,5])
    #2.提取iris的前4列,并转换为矩阵,赋值给test。
    r <- iris[,1:4]
    test <- as.matrix(r)
    
    #3.将test的行名改为flower1,flower2...flower149,flower150。
    rownames(test) <-  paste0("flower",1:150)
    
    #4.将test的第51到100行删除
    test[-(51:100),]
    #5.将iris和test组成一个列表,赋值给tl
    
    t1 <- list(iris,test)
    t1
    #6.提取tl的第二个元素
    t1[[2]]
    names(t1)[2] <-"td" 
    t1[[2]]
    t1
    #删除 
    #删除一个
    rm(l)
    l
    #删除多个
    rm(df,m)
    #删除全部
    rm(list = ls()) 
    
    #清空控制台
    
    #ctrl+l
    
    
    
    #补充元素的名字  names()
    
    x <- 1:10
    names(x)=letters[1:10]
    x
    
    
    
    
    matchtest <- load("matchtest.Rdata")
    View(x)
    View(y)
    m <- x$file_name
    n <- colnames(y)
    k <- x$ID[match(n,m)]
    #所以math(a,b)的意思就是,根据a中数据的排序方式,返回b中数据对应a的位置索引序号
    colnames(y) <- k
    View(y)
    
    
    load("matchtest.Rdata")
    x
    y
    
    #colnames(y)的下标
    match(x$file_name,colnames(y))
    #x$file_name 的下标
    match(colnames(y),x$file_name)
    
    ##方法一:将y 列的顺序调整的和x$filename一致
    y2 = y[,match(x$file_name,colnames(y))]
    colnames(y2) == x$file_name
    
    ##方法二:
    colnames(y) = x$ID[match(colnames(y),x$file_name)]
    
    

    相关文章

      网友评论

          本文标题:2020-11-20R语言入门笔记(2)矩阵,数据框,列表

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