数据类型和向量
数据类型
数据的属性
- 数值型: 1.3 2.5
- 字符型:“a”,‘abc’(单双引号都可以,但要成对出现)
- 逻辑型:TRUE(T)/FALSE(F)/NA 必须纯大写或单字母
- NULL:无;N/A:缺失值(存在但未知,可以是任何数据类型)
- 判断数据类型:
class()
逻辑型数据
比较运算的结果
>,<
<=,>=
==,!= #是否相等和是否不相等
逻辑运算的结果 & | !
3<5&3>5 FALSE
3<5|3>5 TRUE
!3>5 TRUE #支持向量
数据类型的判断和转换
- is族函数:判断数据类型,返回值为T/F
is.numeric()
是否数值型数据
is.logical()
是否逻辑型数据
is.character()
是否字符型数据 - as族函数实现数据类型之间的转换
as.numeric()
将其他类型转换为数值
as.logical()
将其他类型转换为逻辑型
as.character()
将其他类型转换为字符型
不是所有数据都能转换
数据结构
多个数据如何共存
向量
向量的组成部分是元素,长度为元素的数量。
向量的生成:
- 用c() 放到一起
c(2,5,6,2,9)
## [1] 2 5 6 2 9
- 连续数字用
:
1:5
## [1] 1 2 3 4 5
- 有重复用
rep()
,有规律序列用seq()
,随机数用rnorm()
rep('x',times=3)
## [1] "x" "x" "x"
##rep的小Tips
rep(c("a","b","c"),times = 3)
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
rep(c("a","b","c"),each = 3)
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c"
rep(c("a","b"),times = c(4,3))
[1] "a" "a" "a" "a" "b" "b" "b"
c(rep("a",4),rep("b",3))
[1] "a" "a" "a" "a" "b" "b" "b"
seq(from=3,to=21,by=3)
## [1] 3 6 9 12 15 18 21
rnorm(n=3)
## [1] 0.7779750 -0.5969681 -0.8879635
- 通过组合产生复杂向量
paste0(rep('x',times=3),1:3)
## [1] "x1" "x2" "x3"
paste(rep("x",times = 3),1:3,sep='*')
## [1] "x*1" "x*2" "x*3"
Tips:paste()和paste0()的区别
向量转换
对单个向量进行的操作
-
赋值
<-
规范的赋值符号,快捷键Alt
+-
=
也可以用-
赋值+输出
(x<-c(1,3,5))
x<-c(1,3,5);x
-
变量名称的选择:建议使用与意义匹配的字母+数字,可以含有
_
,第一位不建议使用数字,不建议含有特殊符号,不建议使用通用符号如seq,c等。
-
-
简单数学计算:
x <- c(1,3,5,1) x+1 ## [1] 2 4 6 2 log(x) ## [1] 0.000000 1.098612 1.609438 0.000000 sqrt(x) ## [1] 1.000000 1.732051 2.236068 1.000000
-
比较运算,生成逻辑值向量
x <- c(1,3,5,1) x>3 ## [1] FALSE FALSE TRUE FALSE x==3 ## [1] FALSE TRUE FALSE FALSE
-
初级统计
x <- c(1,3,5,1) max(x) #最大值 ## [1] 5 min(x) #最小值 ## [1] 1 mean(x) #均值 ## [1] 2.5 median(x) #中位数 ## [1] 2 var(x) #方差 ## [1] 3.666667 sd(x) #标准差 ## [1] 1.914854 sum(x) #总和 ## [1] 10 length(x) #长度 ## [1] 4 unique(x) #去重复:从第一个元素起,第一次出现为非重复,第二个及以后的元素为重复被去掉 ## [1] 1 3 5 duplicated(x) #对应元素是否重复 ## [1] FALSE FALSE FALSE TRUE table(x) #重复值统计 ## x ## 1 3 5 ## 2 1 1 sort(x) #排序 ## [1] 1 1 3 5 sort(x,decreasing = F) ## [1] 1 1 3 5 sort(x,decreasing = T) ## [1] 5 3 1 1
-
R语言中的“默认思想”
?function
:例如?sort
可以查看sort()函数的帮助文档帮助文档中有函数的一些默认参数,不写参数运行时采用默认参数。
sort()函数默认降序排列
-
能用函数代替解决,不要手动数!(提高代码的可重复性)
对两个向量的操作
-
比较运算,生成等长的逻辑向量(等位运算)
x = c(1,3,5,1) y = c(3,2,5,6) x == y ## [1] FALSE FALSE TRUE FALSE y == x ## [1] FALSE FALSE TRUE FALSE
-
数学计算(等位运算)
x + y ## [1] 4 5 10 7
-
连接(等位运算)
paste(x,y,sep=",") ## [1] "1,3" "3,2" "5,5" "1,6" #paste与paste0的区别 paste(x,y) ## [1] "1 3" "3 2" "5 5" "1 6" paste0(x,y) ## [1] "13" "32" "55" "16" paste(x,y,sep = "") ## [1] "13" "32" "55" "16" paste(x,y,sep = ",") ## [1] "1,3" "3,2" "5,5" "1,6"
-
进行
等位运算
时,两个向量交互时长度不一样:发生了循环补齐将短的向量进行循环补齐(输出结果长度跟着长向量变)
-
利用循环补齐简化代码
paste0(rep("x",3),1:3) ##times=3,省略成3 ## [1] "x1" "x2" "x3" paste0("x",1:3) ## [1] "x1" "x2" "x3"
-
交集、并集、差集
x = c(1,3,5,1) y = c(3,2,5,6) intersect(x,y) ##取交集,使用频率很高,**取交集时会去重复,%in%不去重复** ## [1] 3 5 union(x,y) ##取并集,自动去重复 ## [1] 1 3 5 2 6 setdiff(x,y) ##在x中有,在y中没有 ## [1] 1 setdiff(y,x) ##在y中有,在x中没有 ## [1] 2 6
-
%in%(重要!!)
x %in% y #x的每个元素在y中存在吗 ## [1] FALSE TRUE TRUE FALSE y %in% x #y的每个元素在x中存在吗 ## [1] TRUE FALSE TRUE FALSE
x == y
和x %in% y
的区别
向量筛选
-
根据逻辑值:
[]
将TRUE对应的值提取,FALSE丢弃x <- 8:12 #括号内是运算出逻辑值的内容 x[x == 10] ## [1] 10 x[x < 12] ## [1] 8 9 10 11 x[x %in% c(9,13)] ## [1] 9
- 中括号中是与x等长且一一对应的逻辑值向量
-
根据位置:根据
[]
其中的下标(位置)提取x <- 8:12 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的下标组成的向量
修改向量中的某个/某些元素
取子集+赋值
x
## [1] 8 9 10 11 12
#改一个元素
x[4] <- 40
x
## [1] 8 9 10 40 12
#改多个元素
x[c(1,5)] <- c(80,20)
x
## [1] 80 9 10 40 20
R语言的修改都要赋值,没有赋值就没有发生。
简单向量作图
#### 2.6 简单向量作图
k1 = rnorm(12);k1
## [1] -0.008380258 1.108085674
## [3] -0.842194663 0.343340990
## [5] -0.053610206 0.336025062
## [7] 1.493091002 0.729210438
## [9] -0.656146114 -0.168843964
## [11] -0.608738403 0.406507503
k2 = rep(c("a","b","c","d"),each = 3);k2
#rep的两个参数:'each'和'times'
## [1] "a" "a" "a" "b" "b" "b"
## [7] "c" "c" "c" "d" "d" "d"
plot(k1)
boxplot(k1~k2) ##k1纵坐标,k2横坐标
引用自生信技能树课程!给小洁老师比心~