1.数据类型和向量

1. 数据类型

1.1 三种类型

数值型(numeric):1.3, 2

字符型(character):"a", "1"

逻辑型(logical):TRUE(T), FALSE(F), NA

(1)比较运算的结果为逻辑值:

> 3>5
[1] FALSE
> 3==5
[1] FALSE
> 3<=5
[1] TRUE
> 3!=5
[1] TRUE
> "a"!="b"
[1] TRUE
> "a"=="b"
[1] FALSE

(2)逻辑条件“&”,“|”,“!”的运算

> 3>5 & 3==5
[1] FALSE
> 3<5 | 4>5
[1] TRUE
> !(3>=5)
[1] TRUE

1.2 判断函数

判断数据类型的函数为: class()

> class("1")
[1] "character"
> class(1)
[1] "numeric"
> class(TRUE)
[1] "logical"
> class(NA)
[1] "logical"

1.3 转换函数

#逻辑型->数值型
> as.numeric(TRUE)
[1] 1
> as.numeric(FALSE)
[1] 0
#字符型->数值型
> as.numeric("4")
[1] 4

#数值型->逻辑型
> as.logical(4)
[1] TRUE
> as.logical(0)
[1] FALSE
#字符型->逻辑型
> as.logical("b")
[1] NA
> as.logical("s")
[1] NA

> #数值型->字符型
> as.character(4)
[1] "4"
> #逻辑型->字符型
> as.character(TRUE)
[1] "TRUE"
> as.character(FALSE)
[1] "FALSE"

2. 向量

2.1 向量的生成

(1)使用 c() 罗列

数据转换的优先顺序:
字符型>数值型》逻辑型

#向量包含: 数值型 + 字符型 = 字符型 
> c(1,2,3,"a")
[1] "1" "2" "3" "a"

#向量包含: 数值型 + 逻辑型 = 数值型 
> c(1,2,3,TRUE)
[1] 1 2 3 1

#向量包含: 字符型 + 数值型 + 逻辑型 = 字符型 
> c(1,"a",3,TRUE)
[1] "1"    "a"    "3"    "TRUE"

(2)连续数值向量

> 1:6
[1] 1 2 3 4 5 6

(3)重复值、规律数、随机数

# 重复值
> rep("v",6)
[1] "v" "v" "v" "v" "v" "v"
> rep(c("a","b","c"),3)
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"

# 规律数
> seq(from = 1, to = 5, by = 1)
[1] 1 2 3 4 5
> seq(from = 1, to = 5, by = 2)
[1] 1 3 5

# 随机数
#生成5个服从正态分布(均值为0,标准差为1)的随机数
> rnorm(5, mean = 0, sd = 1)
[1]  2.0884427 -0.8395444  0.4313966 -1.4728999 -2.3550284

(4)组合函数

> paste(rep("x",5),1:5) # paste的分隔符默认为 空格
[1] "x 1" "x 2" "x 3" "x 4" "x 5"
> paste0(rep("x",5),1:5) # paste0无分隔符
[1] "x1" "x2" "x3" "x4" "x5"

2.2 单个向量的操作

(1)赋值

# 标准赋值符号 <-
> x <- c(1,2,3,4)
> x
[1] 1 2 3 4

# 非标准赋值符号 =
> y = c(1,2,3,4)
> y
[1] 1 2 3 4

(2)数学运算

> x <- c(1,2,3,4)
> x+1
[1] 2 3 4 5
> log(x)
[1] 0.0000000 0.6931472 1.0986123 1.3862944
> sqrt(x)
[1] 1.000000 1.414214 1.732051 2.000000

(3)逻辑判断

> x <- c(1,2,3,4)
> x > 3
[1] FALSE FALSE FALSE  TRUE

(4)初级统计

> x <- c(1,2,3,4,5)
> #最小值
> min(x)
[1] 1

> #最大值
> max(x)
[1] 5

> #均值
> mean(x)
[1] 3

> #中位数
> median(x)
[1] 3

> #方差
> var(x)
[1] 2.5

> #标准差
> sd(x)
[1] 1.581139

> #求和
> sum(x)
[1] 15

> #升序排序
> sort(x)
[1] 1 2 3 4 5

> #降序排序
> sort(x,decreasing = TRUE)
[1] 5 4 3 2 1

(5)重复值操作

> x <- c(1,2,3,1,2,5)

> # 统计向量元素个数
> length(x)
[1] 6

> # 统计向量重复元素个数
> table(x)
x
1 2 3 5 #(x中的元素)
2 2 1 1 #(相应元素的个数)

> # 判断向量元素是否重复
> duplicated(x)
[1] FALSE FALSE FALSE  TRUE  TRUE FALSE

> # 统计向量元素个数
> length(x)
[1] 6

> # 去重复
> unique(x)
[1] 1 2 3 5

2.3 两个向量的操作

(1)比较

# 两个向量长度一致时
> x <- c(1,2,3,4,5)
> y <- c(1,2,5,4,8)
> 
> x == y
[1]  TRUE  TRUE FALSE  TRUE FALSE
# 两个向量长度不一致时
> x <- c(1,2,3,1,2,5)
> y <- c(1,2,5)
> 
> #长度小的向量y发生循环补齐,补齐的元素个数与x相同,即 y : (1,2,5,1,2,5)
> x == y
[1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

(2)数学运算

> x <- c(1,2,3,1,2,5)
> y <- c(1,2,5)
> # 加 减 乘 除
> x + y
[1]  2  4  8  2  4 10
> x - y
[1]  0  0 -2  0  0  0
> x * y
[1]  1  4 15  1  4 25
> x / y
[1] 1.0 1.0 0.6 1.0 1.0 1.0

(3)连接

> x <- c(1,2,3,1,2,5)
> y <- c(1,2,5)
> paste(x,y) # paste的分隔符默认为 空格
[1] "1 1" "2 2" "3 5" "1 1" "2 2" "5 5"

> paste0(x,y) # paste0 无分隔符
[1] "11" "22" "35" "11" "22" "55"

> paste(x,y,sep = "")# 取消paste的分隔符,结果与paste0相同
[1] "11" "22" "35" "11" "22" "55"

> paste(x,y,sep = ",")# paste的分隔符设置为 ,
[1] "1,1" "2,2" "3,5" "1,1" "2,2" "5,5"

(4)交集、并集、差集

> x <- c(1,2,3,1,2,5)
> y <- c(1,2,5,1,6)
> # 交集
> intersect(x,y)
[1] 1 2 5

> # 并集
> union(x,y)
[1] 1 2 3 5 6

> # 差集:x除去(x,y)的交集元素
> setdiff(x,y)
[1] 3

> # 差集:y除去(x,y)的交集元素
> setdiff(y,x)
[1] 6

(5) %in%

> x <- c(1,2,3,1,2,5)
> y <- c(1,2,5,1,6)
> # x与y相同位置的元素相等吗 返回值个数为x,y元素个数的最大值
> x == y
[1]  TRUE  TRUE FALSE  TRUE FALSE FALSE

> # x的元素在y中存在吗,返回值个数与x元素个数相同
> x %in% y
[1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

> # y的元素在x中存在吗,返回值个数与y元素个数相同
> y %in% x
[1]  TRUE  TRUE  TRUE  TRUE FALSE

2.4 向量筛选

(1)根据逻辑值筛选

#单个向量
> x <- 2:10 # (2,3,4,5,6,7,8,9,10)

> # 筛选出x > 7的值
> x>7
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
> x[x>7]
[1]  8  9 10
#两个向量
> x <- 2:10 # (2,3,4,5,6,7,8,9,10)
> y <- 5:11 # (5,6,7,8,9,10,11)

> # 筛选出x存在于y中的值
> x[x %in% y]
[1]  5  6  7  8  9 10

(2)根据元素坐标筛选

x <- 2:10 # (2,3,4,5,6,7,8,9,10)

# 筛选出x中第3个、第4个元素
> x[3:4]
[1] 4 5

# 筛选出x中第1个、第7个元素
> x[c(1,7)]
[1] 2 8

2.5 修改向量元素

> x <- 2:10
> x
[1]  2  3  4  5  6  7  8  9 10

> # 将第4个元素赋值为6
> x[4] <- 6
> x
[1]  2  3  4  6  6  7  8  9 10

> # 之后,再将第1个元素赋值为6,第三个元素赋值为8
> x[c(1,3)] <- c(6,8)
> x
[1]  6  3  8  6  6  7  8  9 10

> # 最后,将元素值为6的元素赋值为8
> x[x == 6] <- 8
> x
[1]  8  3  8  8  8  7  8  9 10

2.6 向量元素的命名

(1)命名操作

# 创建向量scores 表示分数
> scores <- c(100,59,78,65,32)
> scores
[1] 100  59  78  65  32

#为向量scores中的元素命名
> names(scores) <- c("ming","uzi","gala","xun","elk")
> scores
ming  uzi gala  xun  elk 
 100   59   78   65   32 

(2)取子集操作

# 取出ming和gala的分数
> scores[c(1,3)] # 按照坐标取
ming gala 
 100   78 
 
> scores[c("ming","gala")] # 按照名称取
ming gala 
 100   78 
 
> scores[scores>60] # 按照逻辑值取
ming gala  xun 
 100   78   65 

# 取出分数超过60的名字
> names(scores)[scores>60]
[1] "ming" "gala" "xun" 

from 生信技能树课程

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值