R语言独特的变量保存格式:Rdata
用于储存有用的变量,准备下次使用
load之后可以把储存的所有变量load出来
练习题
# 练习2-4
# 说明:运行load("gands.Rdata"),即可得到和使用我准备的向量g和s,
load("gands.Rdata")
# 如有报错,说明你的代码写错或project没有正确打开
# 1.用函数计算向量g的长度
length(g)
# 2.筛选出向量g中下标为偶数的基因名。
#(1)先取下标
seq(2,100,2)
#(2)取子集
g[seq(2,100,2)]
# 3.向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来
# 提示:%in%
#(1) 考虑“存在”问题就首先考虑%in%方法,这会返回向量登场的T or F逻辑值
g %in% s
#(2)返回具体多少数目
table(g %in% s)
#(3)取子集
g[g%in%s]
# 4.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
rds=rnorm(n=10,mean=0,sd=18)
rds[rds< -2]
?rnorm
为什么intersect的结果不对?理论上不是应该就是交集吗?
因为intersect没有去重复的能力,%in%是能够去重复的
rds=rnorm(n=10,mean=0,sd=18)
rds[rds< -2]
[1] 20.84536
输出结果是这样的?为什么?
因为小于号和减号连在一起<-就变成了标准的赋值符号了
所以应该在小于号和减号之间加一个空格
rds=rnorm(n=10,mean=0,sd=18) rds[rds< -2]
在小于号和减号之间加一个空格就可以破坏正统赋值符号了
[1] -3.579152 -12.019122 -3.975316 -13.395748
数据类型分类:
Vector 向量——一维的
二维的“表格”——Matrix 矩阵 :只允许统一的数据类型
data.frame 数据框——二维的,但是可以不一样的数据类型
list列表:就是个垃圾袋,什么都能丢进去,一个向量、两个数据框、一个矩阵,等等,都可以存放进去,我们对list的操作就是读取里面存储的某一个向量、某一个矩阵、某一个数据框,我们只对读取出来的东西进行操作,不对列表本身进行操作;
下面这个既可能是矩阵也可能是数据框,但是两者的操作方法不一样?具体操作时怎么判断这是什么呢?
1. 根据生成它的函数
2.用clas或is函数尽心判断
数据框Data.frame
数据框的来源
数据框的来源
- 代码创建
- 已有数据转换或处理得到
- 读取一个表格文件:数据框和表格的区别?数据框约等于excel、csv等表格
- R语言的内置数据:letters 和LETTERS,iris 和 volcano 这些数据可以在R studio中调用出来,但是在Microsoft Visual Coding里就调用不出来
class(volcano)
heatmap(volcano)
is.data.frame(iris)
x=iris
view(x)
#看数据框的一种方式
什么是数据什么是文件?
关闭r studio之后能不能找到,找不到的就是数据,能找到的就是文件
新建数据框和读取文件
从文件中读取数据框:
如果报错的话就是工作目录的问题,当gene.csv不在工作目录下时,就会报错
数据框属性
dim(df1) 提示四行三列
数据框取子集
这里的score可以自动补齐,列名可以被自动补齐
mean(df1$score) 对score一列取平均值
按行取子集会保留数据框属性,按列取子集的话会被处理成向量
【难点】数据框根据逻辑值取子集
把向量k放到行里了,df1[k,],实现对行取子集
数据框的修改
新增一列和修改原数据框里的列的区别是:score是原有列名,但是p.value是原来没有的列名,没有的就是增加
【难点】删除变量
两个数据框的链接
merge by 一个共同的列名
Merge方法
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
group = c("group1","group1","group2","group2"),
vision = c(4.2,4.3,4.9,4.5))
test2
merge(test1,test2,by="name")
当列名不完全相同怎么办?
方法一:修改数据的列名,调整列名以匹配自己会的代码
方法二:
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
weight = c(140,145,110,138))
merge(test1,test3,by.x = "name",by.y = "NAME")
难点
数据框根据逻辑值取子集
矩阵和列表
矩阵
生成一堆数,然后按你给定的行、列数把生成的这堆数填充进去
m <- matrix(1:9, nrow = 3)
取子集方式类似dataframe
注意:不赋值就永远不会发生改变
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
as.data.frame(m)
class(m)
m=as.data.frame(m)
class(m)
列表
新建列表
列表中的元素是可以随便往里面放,矩阵、向量、数据框都可以往里面丢
列表中取元素
列表中元素的名字-names()
疑问?
R中的实例标志符(case identifier)可以用row.names函数进行选定,也就是可以改这里的names?