创建R的数据格式

2022-07-01  本文已影响0人  Bioinfor生信云

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

喜欢就点个赞吧!

上一篇下一篇

猜你喜欢

热点阅读