Part2:数据类型和向量

Part2:数据类型和向量

1.数据类型

  • 三种类型

    • 数值型:1 ,2
  • 字符型:’a' 'm'

    • 逻辑型

      • TRUE: T

      • FALSE:F

      • NA

  • 判断数据类型函数:class()

    • 逻辑运算 多个逻辑条件的连接与&、或|、非!
  • 判断函数

    • is.numeric()
    • is.logical()
    • is.charactor()
  • 转换

    • as.numeric()
    • as.logical()
    • as.charactor()

2.数据结构

  • 向量
    • 向量则是数据框单独拿出的一列,视为一个整体
    • 一个向量只能有一种数据类型,可以有重复值
  • 数据框
    • ​ 数据框约等于表格
  • 矩阵
  • 列表

3.向量

  • 2.1向量的生成

    • 用c()逐一放到一起
    • 连续的数字用冒号”:”
    • 有重复的用rep(),有规律的序列用seq(),随机数用rnorm
      • rep("gene",times=3)
      • seq(from=3,to=21,by=3)
      • rnorm(n=3)
    • paste0()
      image-20201118161221541.png
  • tips:数据类型转换的优先顺序

    • 数值型和逻辑型优先转换为字符型
    • 逻辑型优先转换为数值型
  • 2.2对一个向量进行的操作

    • 1.赋值

      • x = c(1,3,5,6,2) #随意的写法
      • x <- c(1,3,5) #规范的赋值符号
      • 赋值+输出一起执行:
        • (x <- c(1,3,5))
        • x <- c(1,3,5);x
    • 2.简单数学计算

      > x+1 [1] 2 4 6 2
      > log(x) [1] 0.000000 1.098612 1.609438 0.000000
      > sqrt(x) [1] 1.000000 1.732051 2.236068 1.000000
      
  • 3.根据某条件进行判断,生成等长的逻辑向量

    > x>3 [1] FALSE FALSE TRUE FALSE
    > x==3 [1] FALSE TRUE FALSE FALSE
    
  • 4.初级统计

    max(x) #最大值
    min(x) #最小值
    mean(x) #均值
    median(x) #中位数
    var(x) #方差
    sd(x) #标准差
    sum(x) #总和
    
    >length(x) #长度
    [1] 4
    > unique(x) #去重复
    [1] 1 3 5
    > duplicated(x)
    [1] FALSE FALSE FALSE TRUE
    > table(x) #重复值统计
    x
    1 3 5
    2 1 1
    > sort(x)
    [1] 1 1 3 5
    
  • 2.3对两个向量进行的操作

    • 1.逻辑比较,生成等长的逻辑向量

      x = c(1,3,5,1)
      y = c(3,2,5,6)
      
      x == y
      [1] FALSE FALSE TRUE FALSE
      
      x %in% y #x的元素是否在y中
      [1] FALSE TRUE TRUE FALSE
      
  • 2.数学计算

    x + y                                     
    
  • 3.“连接”

    paste(x,y,sep=":")
    [1] "1:3" "3:2" "5:5" "1:6"
    
  • 4.交集、并集、差集

    intersect(x,y)
    [1] 3 5
    union(x,y)
    [1] 1 3 5 2 6
    setdiff(x,y)
    [1] 1
    setdiff(y,x)
    [1] 2 6
    
  • 5.当两个向量长度不一致:循环补齐

image-20201118165909004.png

* 利用循环补齐简化代码

image-20201118170155239.png

4.向量筛选

  • (取子集) [ ]:将TRUE对应的值挑选出来,FALSE丢弃

  • 根据逻辑值:中括号里是与x等长的逻辑值向量

image-20201118170518680.png
  • 根据位置:中括号里是由x的下标组成的向量
image-20201118170645934.png

5.修改向量中的元素

  • 修改某个元素

    x =8:12;x 
    [1]8 9 10 11 12
    
    x[4] <- 40
    取子集+赋值
    
  • 修改某些元素

    x =8:12;x
    [1]8 9 10 11 12
    
    改符合某个逻辑条件的多个元素
    x[x>10] <- 10
    

6.简单向量作图

> k1 = rnorm(12)
> k2 = rep(c("a","b","c","d"),each = 3)
> plot(k1)
> boxplot(k1~k2)

7.向量匹配排序

match:谁在外面,谁就在后面

y[match(x,y)]

8.矩阵(matrix)

所有列的数据类型相同,两个维度(行数和列数)

image-20201120153606662.png
  • 矩阵新建和取子集

    m <- matrix(1:9, nrow = 3)
    
    m[2, ]
    m[, 1]
    m[2, 3]
    m[2:3,1:2]
    
  • 矩阵的转置和转换

    t(m)      #将行变成列,列变成行
    
     as.data.frame(m)         #将矩阵转换为数据框
    
  • 矩阵画热图

     pheatmap::pheatmap(m)
      pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)     #默认的设置不符合你心意,那就自定义
    

9.数据框(data.frame)

多个长度相同、数据类型可以不同的向量按列组合

image-20201120153736664.png

1.数据框来源

(1)在R中新建

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

(3)从文件中读取

(4)内置数据集

2.新建数据框

  • 本质上是向量按列组合

    df <- data.frame(gene =c("gene1","gene2","gene3"),
                  sam = c("sample1","sample2","sample3"),
                  exp = c(32,34,45))
    df <- data.frame(gene = paste0("gene",1:3),
                  sam = paste0("sample",1:3),
                  exp = c(32,34,45))
    
  • 读取数据框

df2 <- read.csv("gene.csv")

3.数据框属性描述

  • 维度(有几行几列)

    dim(df)
    nrow(df) /ncol(df)
    
  • 行名/列名

rownames(df)/colnames(df)

4.数据框取子集(一个、一行、一列)

4.1
  • df[2,2]  #数据框[行,列]
    
  • df [2,]   #取第二行
    df [,2]   #取第二列
    
  • df[c(1,3),1:2]    #对行和列进行选择
    
4.2根据行名或列名
df[,“exp”]
df[,c(“gene”,“exp”)]

进阶—理解以下代码

df[,ncol(df)]      #选取最后一列
df[,-ncol(df)]     #删除最后一列
4.3提取列的常用操作
 df$exp
 
 能对向量进行的计算和统计,都能对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) 总和

5.数据框编辑

  • 取子集$或[] +赋值操作
df[3,3]<- 5
df$abc <-c(23,15,37)

df$abc <-c(23,15,37)        #新增一列,如果原数据框没有这个列名
  • 误操作该怎么办?

    • 对df多次赋值,以最后一次为准
    • 运行了错误的代码,不能撤销,但可以覆盖或重来
  • 修改行名和列名

    rownames(df) <- c("r1","r2","r3")    #改全部行名
    rownames(df)[2] <-"x"                #改一个行名
    

6.数据框进阶

  • 行数较多的数据框可截取前/后几行查看

    head(data.frame)      #查看数据框全部的行
    head(data.frame,3)    #查看数据框的前3行
    
  • 行列数都多的数据框可取前几行前几列查看

    iris[1:3,1:3]     #数据框[]
    
  • 查看每一列的数据类型和具体内容

    str(df)
    
  • 去除含有缺失值的行:

    na.omit(df)   #仅按照某一列来去除缺失值、缺失值替换:tidyr包
    
  • 两个表格的连接

    cbind     #按列连接,行数相同
    rbind     #按行连接,列数相同
    
    merge(test1,test2,by="name")      #共同列的列名
    merge(test1,test3,by.x = "name",by.y = "NAME")
    
  • 6)如果列名顺序错乱,如何按照指定顺序重排?

https://mp.weixin.qq.com/s/rA92iZS8HUiuwlyrPirHdA

10.列表(list)

长度可以不同、数据类型可以不同 向量 数据框 矩阵或数据框 列表 没有行和列的概念,可以有多级元素

image-20201120153917317.png
  • 列表新建和取子集

    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))
          
    [[2]] l$df        #取子集
    

11.删除变量

 rm(l)          #删除一个
 rm(df,m)       #删除多个
 rm(list = ls())        #删除全部
 ctrl+l         #清空控制台

12.元素的“名字”-names()

元素可命名,用函数names(),可根据名字提取子集,向量、数据框、列表通用。

image-20201121162646036.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343