美文网首页
创建R的数据格式

创建R的数据格式

作者: Bioinfor生信云 | 来源:发表于2022-07-01 21:47 被阅读0次

    R软件自带了很多数据集(data set),并附有这些数据集的分析和绘图示例,可在学习R语言时使用。用data()函数可查看R软件的自带数据集输入数据集的名称可查看该数据,用help(数据集名称)可查看该数据集的详细信息。比如,要查看泰坦尼克号的数据,输入Titanic即可,要查看该数据的详细信息,输入help(Titanic)或“?Titanic”即可。
    用R软件分析数据或创建一个图形时,首先要有分析或绘图的数据集。R语言处理的数据集类型包括向量、矩阵、数组、数据框、因子和列表。

    向量、矩阵和数组

    向量

    向量是一个一维数组,是R语言的原子类型。在R中录入一个向量需要用c函数。

    创建向量

    v1 <- c(1,2,3,4,5)   #数值型向量
    v2 <- c("chr1","chr2","chr3")  #字符型向量
    v3 <- c("TURE","FALSE")  #逻辑型向量
    

    快速创建连续的整数向量

    1:5
    

    快速创建重复的向量

    rep(3,10)
    

    取值

    向量的索引也是一个向量

    按位置

    向量的位置是从1开始

    v1[1:3]
    [1] 1 2 3
    v1[-c(1,4)]
    [1] 2 3 5
    

    按逻辑

    v[v%%2==0]
    [1] 2 4
    

    按名称

    names(v1) <- c('chr1','chr2','chr3','chr4','chr5')
    chr1 chr2 chr3 chr4 chr5 
       1    2    3    4    5
    

    计算

    v1+1
    chr1 chr2 chr3 chr4 chr5 
       2    3    4    5    6 
    

    矩阵

    矩阵是一个二维数组,其中的每个元素都是相同的数据类型。用matrix函数可以创建矩阵。

    a <- 1:6   #生成1-6的数值向量
    mat <- matrix(a, #创建向量a的数值矩阵
                  nrow = 2, #矩阵的行数为2
                  ncol = 3, #矩阵的列数为3
                  byrow = TRUE) #按行填充矩阵的元素
    
    mat
         [,1] [,2] [,3]
    [1,]    1    2    3
    [2,]    4    5    6
    

    给矩阵添加行名和列名

    rownames(mat)=c('chr1','chr2') #行名
    colnames(mat)=c('A','B','C') #列名
    
     mat
         A B C
    chr1 1 2 3
    chr2 4 5 6
    

    转置

    t(mat)
      chr1 chr2
    A    1    4
    B    2    5
    C    3    6
    

    数组

    数组与矩阵类似,但维数可以大于2,使用array函数可以创建数组。

    #创建一个2x3x4的数组
    dim1<-c('A','B') #指定第一个维度为2个元素
    dim2<-c('gene1','gene2','gene3') #指定第一个维度为3个元素
    dim3<-c('chr1','chr2','chr3','chr4') #指定第一个维度为4个元素
    data<-round(runif(24,50,100)) #生成24个均匀分布的随机数并取整
    d<-array(data,c(2,3,4),dimnames=list(dim1,dim2,dim3)) #创建数值并赋值给对象d
    
    d
    , , chr1
    
      gene1 gene2 gene3
    A    51    64    66
    B    64    62    81
    
    , , chr2
    
      gene1 gene2 gene3
    A    72    78    59
    B    85    68    85
    
    , , chr3
    
      gene1 gene2 gene3
    A    78    96    86
    B    92    71    93
    
    , , chr4
    
      gene1 gene2 gene3
    A    66    82    50
    B    89    57    87
    

    数据框

    创建

    使用data.frame函数可以创建数据框,数据框的每一列叫做变量,每一行叫做观测值。

    df <- data.frame(S1 = c(1, 2, 3, 4, 5),
                     S2 = c(5, 4, 3, 2, 1),
                     S3 = runif(5, -10, 10), #-10到10之间生成5个数
                     S4 = runif(5, -10, 10))
    
    df
      S1 S2        S3         S4
    1  1  5  4.285124 -4.4689417
    2  2  4 -4.664863 -0.6102111
    3  3  3 -2.872251 -3.7848300
    4  4  2  2.064181 -6.9652761
    5  5  1  9.594043  0.5476802
    
    colnames(df) #查看列名
    rownames(df) #查看行名
    ncol(df) #查看列数
    nrow(df) #查看行数
    dim(df) #查看行数和列数
    head(df, n = 2) #查看前2行
    rownames(df) <- c('gene1','gene2','gene3','gene4','gene5')
    df
          S1 S2        S3         S4
    gene1  1  5  4.285124 -4.4689417
    gene2  2  4 -4.664863 -0.6102111
    gene3  3  3 -2.872251 -3.7848300
    gene4  4  2  2.064181 -6.9652761
    gene5  5  1  9.594043  0.5476802
    

    取值

    提取变量

    返回一个向量
    df$S1
    [1] 1 2 3 4 5
    
    df[2,2]
    [1] 4
    

    按位置

    df[1:3,1:3]
          S1 S2        S3
    gene1  1  5  4.285124
    gene2  2  4 -4.664863
    gene3  3  3 -2.872251
    

    按名称

    df[c('gene1', 'gene3'),c('S1', 'S2')]
          S1 S2
    gene1  1  5
    gene3  3  3
    

    按逻辑

    筛选S1中表达大于1的基因,只选择S2和S4两列

    subset(df, S1>1, select = c('S2','S4'))
          S2         S4
    gene2  4 -0.6102111
    gene3  3 -3.7848300
    gene4  2 -6.9652761
    gene5  1  0.5476802
    

    计算

    与向量计算

    head(df + c(1,2))
          S1 S2        S3         S4
    gene1  2  7  5.285124 -2.4689417
    gene2  4  5 -2.664863  0.3897889
    gene3  4  5 -1.872251 -1.7848300
    gene4  6  3  4.064181 -5.9652761
    gene5  6  3 10.594043  2.5476802
    

    按行和列计算

    rowSums(df)
    colSums(df)
    rowMeans(df)
    colMeans(df)
    #也可以使用apply函数按行或列进行计算
    apply(df, 1, mean)
    

    数据框的合并

    如果需要合并不同的数据框,使用rbind函数可以将不同的数据框按行合并;使用cbind函数可以将不同的数据框按列合并。但需要注意,按行合并时,数据框中的列变量必须相同;按列合并时,数据框中的行变量必须相同,否则合并是没有意义的。

    数据框的排序

    sort(df$S3, decreasing = TRUE) #降序排列
    [1]  9.594043  4.285124  2.064181 -2.872251 -4.664863
    

    如果要对整个数据库中的数据排序,可以使用dplyr R包。

    按照S3升序排列
    arrange(df, S3)
          S1 S2        S3         S4
    gene2  2  4 -4.664863 -0.6102111
    gene3  3  3 -2.872251 -3.7848300
    gene4  4  2  2.064181 -6.9652761
    gene1  1  5  4.285124 -4.4689417
    gene5  5  1  9.594043  0.5476802
    
    按照S4降序排列
    arrange(df, desc(S4))
          S1 S2        S3         S4
    gene5  5  1  9.594043  0.5476802
    gene2  2  4 -4.664863 -0.6102111
    gene3  3  3 -2.872251 -3.7848300
    gene1  1  5  4.285124 -4.4689417
    gene4  4  2  2.064181 -6.9652761
    

    因子和列表

    因子

    类别变量在R软件中称为因子(factor),因子的取值称为水平(level)。很多分析或绘图都可以按照因子的水平进行分类处理。
    使用factor函数可以将向量编码为因子。

    #将无序因子转换为数值
    g <- c('生物','物理','化学','生物')  #因子向量g
    f <- factor(g) #将向量g编码为因子
     f
    [1] 生物 物理 化学 生物
    Levels: 化学 生物 物理
    as.numeric(f) #将因子g转换为数值
    [1] 2 3 1 2
    

    列表

    列表是一些对象的集合,它是R软件中较复杂的形式,一个列表中可能包含若干向量、矩阵、数据框等。使用list函数可以创建列表

    数据类型

    数值型

    a <- c(1, -2, 3.53)
    b <- c(1, 3, 4.5)
    
    round(a, digits = 1) #四舍五入到指定小数
    abs(a) #绝对值
    aqrt(a) #开平方
    sum(a) #求和
    sd(a) #求标准差
    a * b
    a ** b 
    a / b #相除
    a %% b #整除求余
    cor(a, b) #求相关性
    
    

    字符型

    s <- c('A', 'BB', 'CCC', 'DDDD' )
     library(stringr, quietly = T) #使用stringr进行字符串处理
    str_count(s, 'B') #计数
    [1] 0 2 0 0
    str_sub(s, 1, 3) #按位置切分
    [1] "A"   "BB"  "CCC" "DDD"
    str_subset(s, 'D') #包含D的元素
    [1] "DDDD"
    str_length(s) #求长度
    [1] 1 2 3 4
    str_replace(s,'A', 'E') #替换
    [1] "E"    "BB"   "CCC"  "DDDD"
    str_to_lower(s) #转小写
    [1] "a"    "bb"   "ccc"  "dddd"
    str_c(c('chr1','chr2','chr3','chr4'),s,sep = ':') #连接
    [1] "chr1:A"    "chr2:BB"   "chr3:CCC"  "chr4:DDDD"
    str_split(s,'',simplify = T) #拆分
         [,1] [,2] [,3] [,4]
    [1,] "A"  ""   ""   ""  
    [2,] "B"  "B"  ""   ""  
    [3,] "C"  "C"  "C"  ""  
    [4,] "D"  "D"  "D"  "D" 
    str_sort(s) #排序
    [1] "A"    "BB"   "CCC"  "DDDD"
    

    逻辑型

    x <- c(T,F,T)
    y <- c(F,F,F)
    x | y # 或 
    [1]  TRUE FALSE  TRUE
    x | | y # 或
     [1] TRUE
    x & y #与
    [1] FALSE FALSE FALSE
    x && y $与
    [1] FALSE
    !x #非
    [1] FALSE  TRUE FALSE
    

    喜欢就点个赞吧!

    相关文章

      网友评论

          本文标题:创建R的数据格式

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