对单个向量进行的操作
- 赋值给一个变量名 用 <- 或者=
x <- c(1,5,4,8) ### 赋值符号 Alt + -
赋值和输出一起执行
(x <- c(1,3,5))
x <- c(1,3,5); x
> x <- c(1,3,5,1);x
[1] 1 3 5 1
> (x <- c(1,3,5,1))
[1] 1 3 5 1
向量首尾相连
> x=1:5
> y=2:6
> c(x,y)
[1] 1 2 3 4 5 2 3 4 5 6
- 简单数学计算
x=c(1,3,5)
> x + 1 # [1] 2 4 6
- 根据某条件进行判断,生成逻辑值向量
x > 3 # [1] FALSE FALSE TRUE
- 初级统计
var(x) # 方差
sd(x) # 标准差
sum(x) # 总和
length(x) # 长度(向量元素个数)
unique(x) # 去重复,重复值只保留第一次出现,小于x长度的向量
duplicated(x) # 判断元素是否在前面出现过, 与X长度相等的逻辑值向量
table(x) # 重复值统计,共有哪几种元素,并分别出现多少次
sort(x) #从小到大排序
对两个向量的操作
x = c(1,3,5,1)
y = c(3,2,5,6)
- 逻辑比较,生成等长的逻辑向量
x == y #元素比较位置一一对应
# [1] FALSE FALSE TRUE FALSE
x %in% y # x的元素是否在y中,元素与y全部元素比较
# [1] FALSE TRUE TRUE FALSE
- 数学计算
x+y
- 连接 生成一个字符串型数据
paste(x ,y, sep = ":")##中间连接符号默认为空格
# [1] "1:3" "3:2" "5:5" "1:6"
paste0(x,y)#中间连接符号默认没有
x == y 与 x %in% y 的区别
image- 交集、并集、差集
intersect(x,y) # 取交集去重,x、y里面都有的元素
union(x,y) # 取并集去重,x、y里面的元素(去重复)
setdiff(x,y) # 取差集,在x里面有,在y里面没有
setdiff(y, x) # 取差集,在y里面有,在x里面没有
x = c(1,3,5,1)
y = c(3,2,5,6)
> 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
当两个向量长度不一致
理解一下循环补齐
短的补齐,谁长谁说了算
利用循环补齐简化代码
paste0(rep("gene",3), 1:3)
paste0("gene", 1:3)
向量取子集
[]:将TRUE对应的值挑选出来,FALSE舍弃
image> x <- 8:12
> #根据逻辑值取子集(自动取T)
> x[x==10]
[1] 10
> x[x<12]
[1] 8 9 10 11
> x[x %in% c(9,13)]
[1] 9
> #根据位置取子集
> x[4]
[1] 11
> x[2:4]
[1] 9 10 11
> x[c(1,5)]#多个不连续
[1] 8 12
> x[-4]#去除第四个元素
[1] 8 9 10 12
> x[-(2:4)]#去除第二到第四个元素
[1] 8 12
x[-(length(x)-1)]# 去掉向量倒数第2个向量
[] 括号内的内容:
-
可以是一个与 x 等长的逻辑向量
-
能单独运行成功
image
修改向量的元素
将符合某种逻辑条件的元素进行修改
> x[4] <- 40
> x
[1] 8 9 10 40 12
> x[x>10] <- 10
> x
[1] 8 9 10 10 10
简单向量作图
k1 <- rnorm(12)
k2 <- rep(c("a","b","c","d"), each = 3)
plot(k1)#未指定横坐标,自动按元素位置为横坐标,k1为纵坐标
boxplot(k1~k2)#指定k1为纵坐标,k2为横坐标
向量匹配排序 - match
match(x,y) #x中对应y集元素坐标
y[match(x,y)] #根据x,调整y的顺序
调整谁的顺序就把谁写在后面
image数据结构
-
Vector 向量:一维
只有长度,常见生成向量的函数
>c(1,2,3,4,5,6)
>sample(1:100,7) #从1-100里面随机生成7个数字
-
matrix 矩阵:二维(拥有行列)
所有的列数据类型相同,两个维度
函数生成矩阵
matrix(x, nrow = 7) #把X排成矩阵,按照行/列标准排开(一个标准就行)
image.png
多个向量合成矩阵,要求向量长度相等,数据类型一致
x1 <- c(1,2,3)
x2 <- c(2,3,4)
x3 <- c(3,4,5)
cbind(x1, x2, x3)
-
data.frame 数据框
多个长度相同、数据类型可以不同的向量按列组合
>y1=sample(1:100,7);y1
[1]36 64 58 56 24 21 89
>y2=letters[1:7]
[1]"a" "b" "c" "d" "e" "f" "g"
>y3=sample(1:10,7)
[1]1 5 9 2 4 8 3
>data.frame(y1,y2,y3)
-
list 列表
长度可以不同、数据类型可以不同
没有行和列的概念,可以有多级元素
数据框
数据框来源
- 在R中新建
- 由已知数据转换或处理得到
- 从文件中读取
- 内置数据集
df <- data.frame(gene = c("gene1","gene2","gene3"), # gene 是 列名, = 之后是列的内容(向量),内容用逗号分隔
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))
image.png
读取文件得到数据框
df2 <- read.csv("gene.csv")#读取文件已经在工作目录下
数据框属性描述
dim(df) #得到数据框的行数及列数
nrow(df)/ncol(df)#行数目/列数目
rownames(df)#行名
colnames(df)#列名
数据框取子集(向量取子集-位置,数据框取子集-坐标)
单个元素df [2,2]
单行 df [2,] 多行df [1:5,] df [c(1,5,9),]
单列 df [,2]
行列双选 df [c(1,3),1:3]
根据行名or列名取子集
df [,"exp"] df [,c("exp","gene","speidhf")] 如果数据太多,避免出错
>nn=c("exp","gene","speidhf")
>df [,nn]
df [,ncol(df)] 取df最后一列
提取列的常用操作
df$+tab(弹出所有列名)→生成标准向量
image.png
数据框的修改
*改数据
改一个格 df [2,2]
改一整列 df $ 列名<-c(1,2,5)
取子集 $/ [ ] +赋值操作
*修改行名
改全部行名 rownames(df)<-c("d1","d2","d3","d4")
改一个行名 rownames(df)[2]<-"a2" #改第二行名字为“a2”
网友评论