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

R基础-2

原创
作者头像
大胖橘
发布2023-03-13 13:54:58
4250
发布2023-03-13 13:54:58
举报
文章被收录于专栏:R语言 / LinuxR语言 / Linux

生信技能树直播回放D2

1  多个数据如何组织?

批量的数据如何组织?了解数据结构的概念

1.1    数据结构包括四类:向量,数据框,矩阵,列表

      注意:

    (1)数据框约等于”表格“,不是完全等于表格。因为数据框不是电脑上的一个文件,并且要求每一列只能有一种数据类型。但是数据框可以导出,可以导出为一个表格。

    (2)数据框单独拿出的一列是向量(也是一串同一个类型的数据),视为一个整体

    (3)一个向量只能有一种数据类型,可以有重复值。

1.2  向量及后续  使用已准备好的Rproject(钉钉群里的R_01文件)

脚本打开是乱码的解决方式

2 向量

2.1  向量的生成(向量是一串同一种数据类型组合成的整体)

有4种办法

(1)用c()逐一放到一起   【 虽然只有一个字母,但是这也是个函数c】

代码语言:javascript
复制
>c(2,5,6,2,9)
>c("a","f","md","b")   #字符型的数据用c组合的时候每个数据都要用引号"",要不然会找不到对象。

(2)连续的数字用冒号

代码语言:javascript
复制
>1:5        #输出的结果是   1 2 3 4 5

(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm    【随机数函数可以用来编数据练习】

代码语言:javascript
复制
>rep("x",times=3)   #输出的结果是 "x""x""x"
>seq(from=3,to=21,by=3)   #输出的结果是:3,6,9,12,15,18,21
>rnorm(n=3)               #输出3个随机数

(4)通过组合,产生更为复杂的向量【上难度了】

代码语言:javascript
复制
>paste0(rep("x",times=3),1:3)  #输出的结果是:"x1""x2""x3"
[拆解上面的函数] x x x ,1 2 3
paste0做了个连接的事情,相同位置连接在一起,0表示是无缝连接。

练习题

代码语言:javascript
复制
1 #生成1到15之间所有偶数
>seq(from=2,to=15,by=2)   [100分]
2 #生成向量,内容为:"student2" "student4" "student6" "student8" "student10""student12""student14"
提示paste
>paste0(rep("student",times=7),seq(from=2,to=15,by=2) )   [100分]
【一个简单的方法】times等于多少怎么来的?不能总用手指头数,见下面分解!
3 #将两种不同类型的数据用c()组合在一起,看输出结果  【看下面的tips】

一个tips:数据类型转换的优先顺序

先看一个例子。

代码语言:javascript
复制
>c(1,"a")   输出的结果是:"1""a"
【数值型和字符型放在一起,会默认把数值型转换成字符型】
>c(TURE,"a")  输出的结果是:"TURE""a"
【逻辑型和字符型放在一起,会默认把逻辑型转换成字符型】
>c(TURE,FALSE,4)   输出的结果是:1 0 4
【逻辑型和数值型放在一起,会默认把逻辑型转换成数值型】

2.2  对单个向量进行的操作

(1)赋值【标准的符号是:<-      随意的符号是:=       还有一个快捷键是alt加减号】

代码语言:javascript
复制
>x <- c(1,3,5,1)   #规范的赋值符号
>   
>x    这个输出的结果是:1,3,5,1
[运行完第一行代码就出现了一个大于号。直接运行x就行了]
代码语言:javascript
复制
>x = c(1,3,5,1)  #这个是随意的写法
代码语言:javascript
复制
#赋值和输出一起实现 
【第一种方法,加个括号】
>(x=c(1,3,5,1))
【第二种方法,把两句代码写在同一行上,两句代码中间用分号隔开,这个方法更加常用】
>x=c(1,3,5,1);x

关于变量名称的规则:变量名称简单点比较好

可以使用的名字:字母(c不行,因为c是一个函数)、英语单词(函数名字不可以用)、字母和数字组合(但是必须是字母在前面开头)、下划线可以用

不可以使用的名字:变量命名里面带空格不能用(可以用下划线替代空格和中划线)、中文名不能用

(2)简单数学计算

代码语言:javascript
复制
>x=c(1,3,5,1)
>x+1

(3)根据某条件进行判断,生成逻辑值向量

代码语言:javascript
复制
>x>3   可以自己输以下试试
>x==3
【==:这个返回的结果是FALSE 或者 TURE】

(4)初级统计

max(x)   #最大值

min(x)    #最小值

mean(x)   #均值

median(x)   #中位数

var(x)    #方差

sd(x)    #标准差

sum(x)   #总和

代码语言:javascript
复制
>x=c(1,3,5,1)
>length(x)              【#长度】
代码语言:javascript
复制
>x=c(1,3,5,1)
>unique(x)   【 #去重复  第一次出现不叫重复】
代码语言:javascript
复制
>x=c(1,3,5,1)
>duplicated(x)  【 #判断下元素中有没有重复,第一次出现算没重复】
【如果想反过来,就用!这个非常重要,需要记住】
代码语言:javascript
复制
>x=c(1,3,5,1)
>table(x)  【 #重复值统计】
代码语言:javascript
复制
>x=c(1,3,5,1)
>sort(x)  【#排序,R语言按照自己的想法排,那么怎么看R语言自己的想法呢?答:用问号加函数名 ?sort 查看帮助文档】
【查看完帮助文档后,可以自己改默认值,但是要在作者允许的范围内】
>sort(x,decreasing = F)
>sort(x,decreasing = T)

可以在call back上面的练习题,times等于几的问题?

代码语言:javascript
复制
>a=seq(from=2,to=15,by=2)
>paste0(rep("student",times=length(a)),seq(from=2,to=15,by=2) )

R语言里函数思想:能用函数代替,就不要手动去数,除非这代码只用一次

2.3  对两个向量的操作【对于两个向量的操作,不一样的长度时,会发生循环补齐,下面的(1、2、3)】

(1)比较运算,生成等长的逻辑向量

代码语言:javascript
复制
>x=c(1,3,5,1)
>y=c(3,2,5,6)
>x==y
【结果会产生4个逻辑值】

(2) 数学计算

代码语言:javascript
复制
>x+y   【这个是等位运算】

(3)连接

代码语言:javascript
复制
>paste(x,y,sep=",")  【以逗号为分割符号】
【paste和paste0的区别:paste有个空格。paste有个默认参数sep,默认sep" ",而paste0没有这个默认参数】

当两个向量长度不一致时【发生循环补齐】

代码语言:javascript
复制
>x=c(1,3,5,6,2)
>y=c(3,2,5)
>x==y

利用循环补齐简化代码

代码语言:javascript
复制
>paste0(rep("x",3),1:3)
可以简化成
>paste0("x",1:3)   【x可以看作是长度为1个向量】

(4)交集、并集、差集【这个一带而过,用的时候自行百度】

代码语言:javascript
复制
>x=c(1,3,5,1)
>y=c(3,2,5,6)

重点:%in%(没有快捷键)

代码语言:javascript
复制
>x=c(1,3,5,1)
>y=c(3,2,5,6)
>x%in%y   #x的每个元素在y中存在吗?返回的是逻辑值。

xy  和  x %in%y 的区别:xy是一个等位运算,更加严格

2.4  向量筛选(取子集)   中括号      有两种方式

2.4.1    [ ] :将TRUE对应的值挑出来,FALSE丢弃

一个思考:怎么从13个数字里挑出来大于7的?13个数字组成向量,赋值给x,x>7。

代码语言:javascript
复制
比如:下面这些都是根据逻辑值对向量取子集的做法
(1)x<—— 8:12
    x==10     #逻辑值向量
    x[x==10]    #挑选出来x向量中,等于10的那些元素
(2)x<—— 8:12
     x<12
     x[x<12]

2.4.2   取x向量中的对应下表的那些元素    (根据位置筛选)

代码语言:javascript
复制
比如
x<—— 8:12
x[4]    #输出的结果是11
x[2:4]   #输出的结果是9 10 11
x[c(1,5)]   #输出的结果是8  12    取好几个就把他组成一个向量
x[-4]   #反选的意思,只在数值中有意义。去掉第4个数字
x[-(2:4)]

【总结取子集的知识点】

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

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

代码语言:javascript
复制
#思考:从13个彩色的球中,选出属于蓝色和绿色的?
#思路:13个球的颜色赋值给向量x,"蓝色"和"绿色"赋值给y。用逻辑值来实现。x%in%y
x[x %in% y]

2.5 如何修改向量中的某个/某些元素?

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

R语言里的修改,都要赋值,没有赋值就没有发生过

2.6 简单的向量作图

代码语言:javascript
复制
>k1=rnorm(12);k1    #把两句代码写在同一行上,两句代码中间用分号隔开
>k2=rep(c("a","b","c","d"),each=3);k2    
>plot(k1) #作图
>boxplot(k1~k2)

2.7 奥数题思考:如何调整元素顺序?

代码语言:javascript
复制
>x=c("a","b","c","d","e");x
>x[c(2,4,5,1,3)]

sort函数 排序

代码语言:javascript
复制
>scores=c(100,59,73,95,45);scores
>sort(scores)  
思考?用向量取子集的方式,怎么得到相同的结果?scores[?,?,?,?,?]
>scores[c(5,2,3,4,1)]

sort(x)  等于 x[order(x)]  ,x[order(x)]中的order(x)是一组下标,可以给x使用,也可以给x对应的其他向量使用.这个很有用,比如可以y[order(x)]  ,也就是order(x)的结果给y使用.起到移花接木的效果

order有什么用?

代码语言:javascript
复制
>scores=c(100,59,73,95,45) 
#scores依次属于以下几个小朋友.默认就是一一对应了.kids和scores是对应的.
>kids=c("jimmy","nicker","Damon","Sophie","tony") 
#思考:如何按照分数从低到高给小朋友的名字排序? 可以理解为如何给排序后的分数 sort(scores)找到对应的小朋友?
>kids[order(scores)]  #也就是order(scores)的结果给了kids.

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生信技能树直播回放D2
    • 1  多个数据如何组织?
      • 1.1    数据结构包括四类:向量,数据框,矩阵,列表
      • 1.2  向量及后续  使用已准备好的Rproject(钉钉群里的R_01文件)
    • 2 向量
      • 2.1  向量的生成(向量是一串同一种数据类型组合成的整体)
      • 练习题
      • 一个tips:数据类型转换的优先顺序
      • 2.2  对单个向量进行的操作
      • 2.3  对两个向量的操作【对于两个向量的操作,不一样的长度时,会发生循环补齐,下面的(1、2、3)】
      • 重点:%in%(没有快捷键)
      • xy  和  x %in%y 的区别:xy是一个等位运算,更加严格
      • 2.4  向量筛选(取子集)   中括号      有两种方式
      • 2.4.1    [ ] :将TRUE对应的值挑出来,FALSE丢弃
      • 2.4.2   取x向量中的对应下表的那些元素    (根据位置筛选)
      • 【总结取子集的知识点】
      • 2.5 如何修改向量中的某个/某些元素?
      • 2.6 简单的向量作图
      • 2.7 奥数题思考:如何调整元素顺序?
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档