R语言中,数据存储依赖于变量,而变量根据维度又有不同的形式。最为常见的即为向量形式,形式为一维。如:
a=c(1,2,3,4)
如果针对的是二维的数据形式,如读取表格的数据,则需要数据框、矩阵与列表的形式。
1.数据框
数据框,frame,是多种列向量的组合,要求每列数据一致
新建数据框的方法如下:
R=data.frame(number=paste0('a',1:6),celltype=A$V2,Group)
#A$V2,Group是定义过的向量,当没有=时,直接以变量名作列名
读取数据框的方法:
df2 <- read.csv("gene.csv")
1.1取子集
需注意,不要跟向量中的取子集混淆。
若x为向量:
x[2]
x[c(1,2)]
x[1:3]
x[x!=1]
即,都可以取出子集
若x为数据框,我们则需要两个向量来取出子集,用“,”隔开,即
#4.数据框取子集
df1$score #删掉score,按tab键试试
#$和Excel一样,表示锁定
mean(df1$score)
## 按坐标
df1[2,2]
df1[2,]#仍然是frame
df1[,2]#降级成向量了
df1[c(1,3),1:2]
## 按名字,更易读
df1[,"gene"]
df1[,c('gene','change')]
也可通过逻辑值取子集
1.2数据框的修改
基本同向量,但修改形式需要两个向量指引,或指定列向量
需注意,也可有增加列向量,或改行名列名的操作。
#5.数据框修改
#改一个格
df1[3,3] <- 5
df1
#改一整列
df1$score <- c(12,23,50,2)
df1
#?增加一列
df1$p.value <- c(0.01,0.02,0.07,0.05)
df1
#利用负索引,删除第2列,在矩阵中也通用
df1[,-2]
#改行名和列名
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"
1.3数据框的连接merge
示例代码:
#6.两个数据框的连接
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','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('Damon','jimmy','nicker','tony'),
weight = c(140,145,110,138))
test3
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")
2.1矩阵
基本同数据框
##### 矩阵和列表
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
m[2,]
m[,1]
m[2,3]
m[2:3,1:2]
m
t(m)#转置
as.data.frame(m)#转变为数据框
3.1列表
#列表,放了两个矩阵
x <- list(m1 = matrix(1:9, nrow = 3),
m2 = matrix(2:9, nrow = 2))
x
x[[1]]#列表取子集,要两个[]
x$m1