前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言基础-向量生成及相关操作

R语言基础-向量生成及相关操作

原创
作者头像
生信汪一昂
发布2023-09-16 14:23:46
2950
发布2023-09-16 14:23:46
举报
文章被收录于专栏:生信学习之路生信学习之路

title: "Note-20230906"

output: html_document

date: "2023-09-06"


2.1 向量生成

2.1.1 用c()逐一放到一起

代码语言:text
复制
c(1,2,3,4,5)
代码语言:txt
复制
## [1] 1 2 3 4 5
代码语言:text
复制
#字符串记得加引号哦
c('a','b','c','d')
代码语言:txt
复制
## [1] "a" "b" "c" "d"

2.1.2 连续数字用冒号':'

代码语言:text
复制
1:8
代码语言:txt
复制
## [1] 1 2 3 4 5 6 7 8
代码语言:text
复制
4:6
代码语言:txt
复制
## [1] 4 5 6

2.1.3 重复-rep()、规律-seq()、随机数-rnorm()

代码语言:text
复制
rep('WY',times = 5) #规范写法
代码语言:txt
复制
## [1] "WY" "WY" "WY" "WY" "WY"
代码语言:text
复制
rep('WY',5) #熟练后可以简写提高效率
代码语言:txt
复制
## [1] "WY" "WY" "WY" "WY" "WY"
代码语言:text
复制
seq(from = 3,to = 15,by = 3) #规范写法
代码语言:txt
复制
## [1]  3  6  9 12 15
代码语言:text
复制
seq(3,15,3) #简写
代码语言:txt
复制
## [1]  3  6  9 12 15
代码语言:text
复制
rnorm(n=3) #规范写法
代码语言:txt
复制
## [1] -0.05298387  2.96294158  0.49128926
代码语言:text
复制
rnorm(3) #简写
代码语言:txt
复制
## [1]  0.56334365 -1.33069426 -0.08674815
代码语言:text
复制
#没记错的话,小洁老师课堂里提到过,随机数大家每次运行的结果极大概率是不相同的,但是通过一定操作可以让出现过的随机数重现(尽管大部分情况没啥必要)。
#课外拓展:现在所谓的随机数其实都是‘伪随机数’,真正的随机数可能需要量子计算机问世之后才会出现。因此通过一些特定代码,保留“随机状态”,就能使随机数重现啦。

2.1.4 通过组合之后可以生成更复杂的向量

代码语言:text
复制
paste0(rep('WY',times = 5),1:6) # 2.1.2 + 2.1.3 规范写法
代码语言:txt
复制
## [1] "WY1" "WY2" "WY3" "WY4" "WY5" "WY6"
代码语言:text
复制
paste0('WY',1:6) # 学习了循环补齐后的简写
代码语言:txt
复制
## [1] "WY1" "WY2" "WY3" "WY4" "WY5" "WY6"

2.2 对单个向量进行操作

2.2.1 赋值

代码语言:text
复制
x <- c(1,2,3,4,5) #规范的赋值符号,这辈子可能就敲两次(一次课上,一次在这)
x = c(1,2,3,4,5) #简写
(x = c(1,2,3,4,5)) #赋值加输出(不过我还是喜欢另起一行输出哈哈)
代码语言:txt
复制
## [1] 1 2 3 4 5
代码语言:text
复制
x = c(1,2,3,4,5);x #多行代码写一行(不止是赋值和输出哈)
代码语言:txt
复制
## [1] 1 2 3 4 5

2.2.2 简单数学运算

代码语言:text
复制
#加减乘除、一些针对数字类型的函数都可以
x+1
代码语言:txt
复制
## [1] 2 3 4 5 6
代码语言:text
复制
log2(x)
代码语言:txt
复制
## [1] 0.000000 1.000000 1.584963 2.000000 2.321928
代码语言:text
复制
sqrt(x)
代码语言:txt
复制
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068

2.2.3 根据条件进行判断,生成逻辑值向量

代码语言:text
复制
#以前听一位计算机老师说过,逻辑判断是所有编程语言的核心(后面的筛选就是建立在这个基础上)
x > 3
代码语言:txt
复制
## [1] FALSE FALSE FALSE  TRUE  TRUE
代码语言:text
复制
x == 3
代码语言:txt
复制
## [1] FALSE FALSE  TRUE FALSE FALSE

2.2.4 初级统计

代码语言:text
复制
#一些基础的函数,就算记不住百度下或者help下就行
max(x) #最大值
代码语言:txt
复制
## [1] 5
代码语言:text
复制
min(x) #最小值
代码语言:txt
复制
## [1] 1
代码语言:text
复制
mean(x) #均值
代码语言:txt
复制
## [1] 3
代码语言:text
复制
median(x) #中位数
代码语言:txt
复制
## [1] 3
代码语言:text
复制
var(x) #方差
代码语言:txt
复制
## [1] 2.5
代码语言:text
复制
sd(x) #标准差
代码语言:txt
复制
## [1] 1.581139
代码语言:text
复制
sum(x) #总和
代码语言:txt
复制
## [1] 15
代码语言:text
复制
length(x) #长度(返回数字,向量元素个数)
代码语言:txt
复制
## [1] 5
代码语言:text
复制
# 这四个函数中文上都与重复有点关联,因此放一起记忆
x = c(1,1,1,2,2,2,2,3,3,3,3,4,4,4,5)
unique(x) #去重复(以这边的x为例,返回数字,长度发生变化,这取决于你向量中非重复元素的个数)
代码语言:txt
复制
## [1] 1 2 3 4 5
代码语言:text
复制
duplicated(x) #对应元素是否重复(返回逻辑值,长度不发生变化)
代码语言:txt
复制
##  [1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [12] FALSE  TRUE  TRUE FALSE
代码语言:text
复制
table(x) #重复值统计(每个元素的出现次数会一一对应)
代码语言:txt
复制
## x
## 1 2 3 4 5 
## 3 4 4 3 1

2.2.5 默认思想

代码语言:text
复制
#老师是以sort()为例子
sort(x)
代码语言:txt
复制
##  [1] 1 1 1 2 2 2 2 3 3 3 3 4 4 4 5
代码语言:text
复制
sort(x,decreasing = F) # decreasing 降序,默认情况下的完整写法
代码语言:txt
复制
##  [1] 1 1 1 2 2 2 2 3 3 3 3 4 4 4 5
代码语言:text
复制
sort(x,decreasing = T) # decreasing的参数可以修改成T,这样就是升序啦
代码语言:txt
复制
##  [1] 5 4 4 4 3 3 3 3 2 2 2 2 1 1 1

2.2.6 能用函数搞定的事情,就别自己数

代码语言:text
复制
# 一道课堂练习题:生成向量,内容为:"student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
#解题思路:
#1.字符-数字的交联想到paste0() #2.观察:字符均为‘student’,使用rep(),重复次数利用函数length();数字具有一定规律,想到seq()
#顺理成章写出
a = seq(2,14,2)
paste0(rep('student',length(a)),a)
代码语言:txt
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10"
## [6] "student12" "student14"
代码语言:text
复制
#以下仅个人理解:代码不是越短越好,因为大项目都需要合作,你的代码可能会给很多人看,当然也不需要过分详细。

paste0('student',seq(2,14,2)) #最简代码(循环补齐)
代码语言:txt
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10"
## [6] "student12" "student14"

paste和paste0的区别

代码语言:text
复制
#这边直接复制的Help文档,paste默认两个元素之间的连接存在空格(这个参数可以修改),paste0则无。
paste (..., sep = " ", collapse = NULL, recycle0 = FALSE)
代码语言:txt
复制
## Error in eval(expr, envir, enclos): '...' used in an incorrect context
代码语言:text
复制
paste0(...,            collapse = NULL, recycle0 = FALSE)
代码语言:txt
复制
## Error in eval(expr, envir, enclos): '...' used in an incorrect context

两个向量长度不一致时,便会发生循环补齐

代码语言:text
复制
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y
代码语言:txt
复制
## [1] FALSE FALSE  TRUE FALSE  TRUE
代码语言:text
复制
#上述这种情况便会发生循环补齐,y = c(3,2,5)会变成y = c(3,2,5,3,2)
#返回与较长向量相同元素个数的逻辑值哦(这边就是5个)
#循环补齐可以在一定程度上简化代码,上文已经提到,这边就不写了

2.3 对两个向量的操作

代码语言:text
复制
x = c(1,3,5,1)
y = c(3,2,5,6)
# 1.比较运算,生成等长的逻辑向量
x == y;y == x #两者等价
代码语言:txt
复制
## [1] FALSE FALSE  TRUE FALSE
代码语言:txt
复制
## [1] FALSE FALSE  TRUE FALSE
代码语言:text
复制
# 2.数学计算
x + y #一一对应相加
代码语言:txt
复制
## [1]  4  5 10  7
代码语言:text
复制
# 3.连接
paste(x,y,sep=",")#由于数字之间不存在分隔符号的话容易存在混淆,因此这边一般使用paste而非paste0
代码语言:txt
复制
## [1] "1,3" "3,2" "5,5" "1,6"
代码语言:text
复制
# 4.交集、并集、差集
x = c(1,3,5,6,2)
y = c(3,2,5)
intersect(x,y)#交集
代码语言:txt
复制
## [1] 3 5 2
代码语言:text
复制
union(x,y)#并集
代码语言:txt
复制
## [1] 1 3 5 6 2
代码语言:text
复制
setdiff(x,y) # x里有,y里没有的
代码语言:txt
复制
## [1] 1 6
代码语言:text
复制
setdiff(y,x) # y里有,x里没有的
代码语言:txt
复制
## numeric(0)
代码语言:text
复制
#差集可能有点混,新建个脚本跑一遍就知道了

# 5.补集(小洁老师的课堂作业)
#补集的定义:setdiff(全集,交集)
setdiff(union(x,y),intersect(x,y)) #一组合就完事啦
代码语言:txt
复制
## [1] 1 6
代码语言:text
复制
# 6.重点 %in%
x %in% y #x的每个元素在y中存在吗
代码语言:txt
复制
## [1] FALSE  TRUE  TRUE FALSE  TRUE
代码语言:text
复制
y %in% x #y的每个元素在x中存在吗
代码语言:txt
复制
## [1] TRUE TRUE TRUE

2.4 向量筛选(取子集)

2.4.1 通过逻辑值

代码语言:text
复制
x = 8:12
x[x == 10]
代码语言:txt
复制
## [1] 10
代码语言:text
复制
x[x < 12]
代码语言:txt
复制
## [1]  8  9 10 11
代码语言:text
复制
x[x %in% c(9,13)]#只能取到9哦
代码语言:txt
复制
## [1] 9

2.4.2 根据位置

代码语言:text
复制
x = 8:12
x[4]#要第4个
代码语言:txt
复制
## [1] 11
代码语言:text
复制
x[2:4]#要2-4个
代码语言:txt
复制
## [1]  9 10 11
代码语言:text
复制
x[c(1,5)]#要第1个和第5个
代码语言:txt
复制
## [1]  8 12
代码语言:text
复制
x[-4]#不要第4个
代码语言:txt
复制
## [1]  8  9 10 12
代码语言:text
复制
x[-(2:4)]#不要第2-4个
代码语言:txt
复制
## [1]  8 12

2.4.3 x【x %in% y】可以帮助你从一堆信息中获取你想要的

2.5修改向量中的某个/某些元素:取子集+赋值

代码语言:text
复制
x = 8:12
#改一个元素
x[4] = 40
#改多个元素
x[c(1,5)] <- c(80,20)
#这部分很好理解吧,就复制了下代码

引用自生信技能树

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.1 向量生成
    • 2.1.1 用c()逐一放到一起
      • 2.1.2 连续数字用冒号':'
        • 2.1.3 重复-rep()、规律-seq()、随机数-rnorm()
          • 2.1.4 通过组合之后可以生成更复杂的向量
          • 2.2 对单个向量进行操作
            • 2.2.1 赋值
              • 2.2.2 简单数学运算
                • 2.2.3 根据条件进行判断,生成逻辑值向量
                  • 2.2.4 初级统计
                    • 2.2.5 默认思想
                      • 2.2.6 能用函数搞定的事情,就别自己数
                      • paste和paste0的区别
                        • 两个向量长度不一致时,便会发生循环补齐
                        • 2.3 对两个向量的操作
                        • 2.4 向量筛选(取子集)
                          • 2.4.1 通过逻辑值
                            • 2.4.2 根据位置
                              • 2.4.3 x【x %in% y】可以帮助你从一堆信息中获取你想要的
                              • 2.5修改向量中的某个/某些元素:取子集+赋值
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档