R语言中的数据结构
1.R的赋值符号不是等号,而是<- ("Alt" + "-" );
2.R的代码都是带括号的,括号必须是英文的;
3.显示工作路径 getwd();
4.向量是由元素组成的,元素可以是数字或者字符串;
5.表格在R语言中改名叫数据框;
6.函数或者命令不会用时,除了百度/谷歌搜索以外,用这个命令查看帮助:?read.table,调出对应的帮助文档,翻到example部分研究。
数据类型(重点只有两个,剩下的不看)
- 向量(vector)👈重要
- 矩阵(Matrix)
- 数组(Array)
- 数据框(Data frame)👈重要
- List
1.向量
元素指的是数字或者字符串(用chr表示)等,根据它可以区分两个词:
- 标量:一个元素组成的变量
- 向量:多个元素组成的变量
(P.S:一个向量是一排有序排列的元素,以后会有把一个向量作为数据框中的一列的情况)
a .赋值
一般都会直接给变量定义,也就是“赋值”——赋予这个变量一个数值(还可以是字符串/数据框等等)
x<- c(1,2,3) #常用的向量写法,意为将x定义为由元素1,2,3组成的向量。
x<- 1:10 #从1-10之间所有的整数
x<- seq(1,10,by = 0.5) #1-10之间每隔0.5取一个数(注意是逗号不是分号)
x<- rep(1:3,times=2) #1-3 重复2次
P.S:如果是给同一个对象赋值,后执行的命令会覆盖前一个命令。
b.从向量中提取元素
(1)根据元素位置
x[4] #x第4个元素
x[-4] #排除法,除了第4个元素之外剩余的元素
x[2:4] #第2到4个元素
x[-(2:4)] #除了第2-4个元素
x[c(1,5)] #第1个和第5个元素
(2)根据值
x[x==10]#等于10的元素,有两个“==”,一个“=”也是按位置提取元素了
x[x<0] #值为负数的元素
x[x %in% c(1,2,5)]#存在于向量c(1,2,5)中的元素
2.数据框
P.s:数据得放在相应的工作目录下
a.读取本地数据
在工作目录下创建一个文档 "R.txt"(一定要放在工作目录下,不然会报错!)
read.table(file="R.txt",sep="\t",header=T)
a <- read.table(file="R.txt",sep="\t",header=T)
sep:通常,打开文件看一下就可以确定文件所使用的字段分隔符,但对于空白分割的文件,可以选择默认的sep = "" (它能使用任何空白符作为分隔符,比如空格,制表符,换行符), sep = " " 或者 sep = "\t" 。注意,分隔符的选择会影响输入的被引用的字符串。但如果你有含有空字段的制表符分割的文件,一定要使用 sep = "\t"。
header:将第一行当作列名。用于指出文件的第一行是否为数据变量的名字,缺省情况下,由文件的格式来确定此值。如果设置为TRUE,则要求第一行要比数据列的数量少一列。
row.names=1:将第一列当作行名。
b.查看行名和列名
X<-read.csv('R.txt') #在示例数据里有R.txt 注意这里的变量X是一个数据框
colnames(X) #查看列名
rownames(X) #查看行名,默认值的行名就是行号,1.2.3.4...
colnames(X)[1]<-"bioplanet" #有的公司返回数据,左上角第一格为空,R会自动补为x,用这个命令来修改
X<-read.csv(file = "huahua.txt",sep = " ",header =T,row.names=1) #最后row.names的意思是修改第一列为行名
read_csv和read_table的区别在于separator分隔符。
csv是逗号分隔值(Comma-Separated Values),仅能正确读入以 “,” 分割的数据。
table的分隔符是tab
c.数据框的导出
write.table(X,file = "yu.txt",sep = ",",quote=F) #分隔符改为逗号,quote表示字符串不加双引号(默认格式带有双引号)
d.变量的保存与重新加载
这次没有处理完的数据下次想接着用怎么办?
--学会保存和重新加载。保存的格式是RData。
save.image(file="bioinfoplanet.RData") #保存当前所有变量
save(X,file="test.RData") #保存其中一个变量
load("test.RData") #再次使用RData时的加载命令
e.提取元素
- X[x,y] #第x行第y列,x和y为你想的具体行列数字
- X[x,] #第x行
- X[,y] #第y列
- X[y] #也是第y列
- X[a:b] #第a列到第b列
- X[c(a,b)] #第a列和第b列
- X$列名 #也可以提取列(这个命令优秀到不用写括号的地步,并且支持Tab自动补全,不过只能提取一列)
X为之前赋值的一个数据框
而至于save(X,file="test.RData")
这句代码如果报错object X not found,是为什么,应该怎么解决?
我个人觉得可能是没有对 X 赋值或者没有注意大小写而导致的。