一、数据类型
二、向量
#####2.1.向量生成🌟#####
#(1)用 c() 结合到一起
c(2,5,6,2,9)
c("a","f","md","b")
#(2)连续的数字用冒号“:”
1:5
5:1
#(3)批量生成向量:有重复的用rep(), 有规律的序列用seq(), 随机数用rnorm
rep("x",times=3)
seq(from=3,to=21,by=3)
rnorm(n=3)
#(4)通过组合,产生更为复杂的向量。
paste0(rep("x",times=3),1:3)
注:paste和paste0的区别
paste
这样总结一下,sep连接的是元素间的扩展,collapse是一种元素间的折叠坍缩
paste0
继续![](https://i-blog.csdnimg.cn/blog_migrate/ded6c0abe8ca625400d4d6564d3404c0.png)
#####2.2对单个向量进行的操作####
#(1)赋值给一个变量名
x = c(1,3,5,1) #随意的写法
x
x <- c(1,3,5,1) #规范的赋值符号 Alt+减号
x
#赋值+输出一起实现
x <- c(1,3,5,1);x
(x <- c(1,3,5,1))
#(2)简单数学计算
x+1
log(x)
sqrt(x)
#(3)根据某条件进行判断,生成逻辑型向量
x>3
x==3
![](https://i-blog.csdnimg.cn/blog_migrate/b793de9128d201b719f5552a3b7403ed.png)
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和
length(x) #长度
unique(x) #去重复
duplicated(x) #对应元素是否重复
table(x) #重复值统计
sort(x)
sort(x,decreasing = F)
sort(x,decreasing = T)
#####2.3.对两个向量进行的操作#####
x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)比较运算,生成等长的逻辑向量
x == y
y == x
#(2)数学计算
x + y
#(3)连接
paste(x,y,sep=",")
#paste与paste0的区别
paste(x,y)
paste0(x,y)
paste(x,y,sep = "")
paste(x,y,sep = ",")
#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y # 啊!warning!
#会发生循环补齐
#利用循环补齐简化代码
paste0(rep("x",3),1:3)
paste0("x",1:3)
#(4)交集、并集、差集
intersect(x,y) ###交集默认去重复
union(x,y)
setdiff(x,y)
setdiff(y,x)
x %in% y #x的每个元素在y中存在吗(不去重)
y %in% x #y的每个元素在x中存在吗
#####2.4.向量筛选(取子集)#####
x <- 8:12 #赋值向量(8,9,10,11,12)
#根据逻辑值取子集
x[x==10]
x[x<12]
x[x %in% c(9,13)]
#根据位置取子集
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-(2:4)]
####2.5.修改向量中的某个/某些元素:取子集+赋值
x
#改一个元素
x[4] <- 40
x
#改多个元素
x[c(1,5)] <- c(80,20)
x
#### 2.6 简单向量作图
k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
plot(k1)
boxplot(k1~k2)
####boxplo:箱子的中间一条线,是数据的中位数,代表了样本数据的平均水平。箱子的上下限,分别是数据的上四分位数和下四分位数。这意味着箱子包含了50%的数据。因此,箱子的宽度在一定程度上反映了数据的波动程度。
#箱线图是针对连续型变量的,解读时候重点关注平均水平、波动程度和异常值
#当箱子被压得很扁,或者有很多异常的时候,试着做对数变换
#当只有一个连续型变量时,并不适合画箱线图,直方图是更常见的选择
#箱线图最有效的使用途径是作比较,配合一个或者多个定性数据,画分组箱线图
注:!duplicated(x)比duplicate(x)更常用,输出逻辑值,前者非重复为TURE
注:R语言里的修改都要赋值,没有赋值,修改就没有发生
### 如何调整元素顺序
x <- c("A","B","C","D","E");x
x[c(2, 4, 5, 1, 3)]
scores = c(100,59,73,95,45);scores
sort(scores)#排序
scores[c(5,2,3,4,1)]#向量取子集的方式达到排序效果
scores[order(scores)]等同于scores[c(5,2,3,4,1)]
即:sort(x)效果等同于x[order(x)]
match函数:x[match(y,x)],以y为模板调整x(x,y是长度相同,顺序不同的俩个向量)
谁在外面,谁就在后面
【例】a和b是两个内容相同顺序不同的向量,才会用到match
确认a(x$file_name)与b(colnames(y))是否内容相同:
table(x$file_name%in%colnames(y))
table(colnames(y)%in%x$file_name)
m=x$file_name[match(colnames(y),x$file_name)]
m==colnames(y)
identical(m,colnames(y))#证明属于x$file_name的下标,也可以给x$ID用,因为对应
n==x$ID[match(colnames(y),x$file_name)]
原理:m与n对应,m与colnames(y)对应,n与colnames(y)对应
法二:调整x行的顺序,让他与colnames(y)对应
法三:调整y列的顺序,让他与x$file_name对应
来自R_02练习题最后
# match练习题
load("matchtest.Rdata")
一个关于match的详细讲解:
转自:生信技能树