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

R语言-基础+向量

原创
作者头像
yurric
修改2023-02-03 17:33:09
7900
修改2023-02-03 17:33:09
举报
文章被收录于专栏:R语言&linuxR语言&linux

一、r语言基础

>生信技能树
>生信技能树

二、数据类型

数据类型:数值型(numeric),字符型(character,必须加" "or' '),逻辑型(TRUE FALSE NA存在但未知)

null 不存在

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

unexpected: 代码错误的关键词

1)逻辑型数据

比较运算的结果是逻辑值

< <= >= == !=

逻辑运算:与& 或| 非!

2)数据类型的判断与转换

is族函数判断

>生信技能树
>生信技能树

as族函数实现数据类型转换

>生信技能树
>生信技能树

3)数据类型转换的优先顺序

字符型 > 数值型 > 逻辑型

三、数据结构

数据框约等于表格 每一列只能有一种数据类型

数据框单独一列是向量,视为一个整体

向量里只有一种数据类型,但是可以有重复值

向量<数据框<矩阵<列表

1.向量的生成

代码语言:javascript
复制
#(1)用 c() 结合到一起
c(2,5,6,2,9) 
c("a","f","md","b")
#(2)连续的数字用冒号“:” 
1:5
#(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm()
rep("x",times=3)  
rep('a','b','c',each = 3)
seq(from=3,to=21,by=3)
rnorm(n=3)
#(4)通过组合,产生更为复杂的向量。
paste0(rep("x",times=3),1:3)

补充:paste和paste0的区别,paste默认sep=空格,paste无sep

代码语言:javascript
复制
paste(c("a", "b","c"),1:3)##默认空格符
## [1] "a 1" "b 2" "c 3"
paste(c("a", "b","c"),1:3,sep=" ")
## [1] "a 1" "b 2" "c 3"
paste(c("a", "b","c"),1:3,sep="")
## [1] "a1" "b2" "c3"
#如果两个向量长度不同
paste(c("a", "b","c"),1:5)##超出范围后继续从前向后连接
## [1] "a 1" "b 2" "c 3" "a 4" "b 5"
#paste0的表现
paste0(c("a", "b","c"),1:3)#默认元素连接为sep=""
## [1] "a1" "b2" "c3"

https://www.jianshu.com/p/44e3de9b7a81

2.对单个向量进行的操作

代码语言:javascript
复制
#(1)赋值给一个变量名
x = c(1,3,5,1) #随意的写法
x <- c(1,3,5,1) #规范的赋值符号 Alt+减号

#赋值+输出一起实现
x <- c(1,3,5,1);x  #写在一行必须用';'
(x <- c(1,3,5,1))  

>生信技能树
>生信技能树
代码语言:javascript
复制
#(2)简单数学计算
x+1
log(x)
sqrt(x)

#(3)根据某条件进行判断,生成逻辑型向量
x>3
x==3
代码语言:javascript
复制
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和

length(x) #长度
unique(x) #去重复,从左往右第一次出现不叫重复,此后出现叫重复
duplicated(x) #对应元素是否重复,从左往右第一次出现不叫重复,此后出现叫重复
!duplicated(x) #无重复TRUE,重复FALSE
table(x) #重复值统计 
sort(x)
sort(x,decreasing = F) #F为默认值
sort(x,decreasing = T)

3.对两个向量的操作

代码语言:javascript
复制
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=",")

#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y #最后结果和最长的那个有关;循环补齐
#利用循环补齐简化代码
paste0(rep("x",3),1:3)
paste0("x",1:3)

#(4)交集、并集、差集
intersect(x,y) #交集
union(x,y) #并集
setdiff(x,y) #仅在x中有的结果
setdiff(y,x) #仅在y中有的结果

重点:%in%

代码语言:javascript
复制
x %in% y #x的每个元素在y中存在吗
y %in% x #y的每个元素在x中存在吗

>生信技能树
>生信技能树

4.向量筛选(取子集) []: 将TRUE对应的值挑选出来,FALSE丢弃

代码语言:javascript
复制
x <- 8: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)] #-表示删掉元素

- 表示删掉元素,与python区分

总结:

按照逻辑值:中括号里是与x等长且一一对应的逻辑值向量

按照位置:中括号里是由x的下标组成的向量

按条件挑选某个向量中两种类型的子集

x为向量 y为条件

x[x%in%y]

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

代码语言:javascript
复制
#改一个元素
x[4] <- 40
x
#改多个元素
x[c(1,5)] <- c(80,20)
x

变量的修改需要赋值操作

6.简单向量作图

代码语言:javascript
复制
k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2 #each和times不同,
plot(k1)
boxplot(k1~k2)  #k1纵坐标,k2横坐标

补充练习题

代码语言:javascript
复制
#生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
rnorm(n=10,mean=0,sd=18)
z=rnorm(n=10,mean=0,sd=18)
z[z<(-2)] #不打括号<-为赋值,给出的结果与期望不符
z[z< -2] #空格隔开

运行顺序:有嵌套先里后外,无嵌套从左到右

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、r语言基础
  • 二、数据类型
    • 1)逻辑型数据
      • 2)数据类型的判断与转换
        • is族函数判断
        • as族函数实现数据类型转换
      • 3)数据类型转换的优先顺序
        • 字符型 > 数值型 > 逻辑型
        • 向量<数据框<矩阵<列表
    • 三、数据结构
      • 1.向量的生成
        • 2.对单个向量进行的操作
          • 3.对两个向量的操作
            • 4.向量筛选(取子集) []: 将TRUE对应的值挑选出来,FALSE丢弃
              • 5.修改向量中的某个/某些元素:取子集+赋值
                • 6.简单向量作图
                  • 补充练习题
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com