R的数据结构
R的代码都是带括号的,括号必须是英文的。查看命令帮助:?read.table
1. 数据类型
- 向量(vector)
- 数据框(Data frame)
- 矩阵(Matrix)
- 数组(Array)
- List
生信,最需要熟悉的是向量和数据框。
2. 向量(vector)
2.1 变量(标量和向量)
2.2 变量赋值
2.3 从向量中提取元素
3 数据框
将数据放在你的工作目录下
3.1 读取本地数据
函数 read.table 是读取矩形格子状数据最为便利的方式。详细参见https://www.cnblogs.com/xianghang123/archive/2012/06/06/2538274.html
read.csv、read.csv2、read.delim是read.table函数的包装,分隔符分别对应逗号,分号,制表符,同样接受read.table所有参数。
read.csv函数header参数默认为TRUE,不同于read.table。https://www.cnblogs.com/zhangduo/p/4440314.html
- sep
通常,打开文件看一下就可以确定文件所使用的字段分隔符,但对于空白分割的文件,可以选择默认的sep = "" (它能使用任何空白符作为分隔符,比如空格,制表符,换行符), sep = " " 或者 sep = "\t"。
注意,分隔符的选择会影响输入的被引用的字符串。
如果你有含有空字段的制表符分割的文件,一定要使用 sep = "\t" - header
建议明确地设定 header 参数。按照惯例,首行只有对应列的字段而没有行标签对应的字段。因此,它会比余下的行少一个字段。(如果需要在 R 里面看到这一行,设置 header = TRUE。)
read.table(file="huahua.txt",sep="\t",header=T)
a<-read.table(file="huahua.txt",sep="\t",header=T)
header参数:默认为FALSE即数据框的列名为V1,V2...,设置为TRUE时第一行作为列名
3.2 设置行名和列名
x<-read.csv('doudou.txt') #在示例数据里有doudou.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的意思是修改第一列为行名
3.3 数据框的导出
write.table(x, file = “”, append = FALSE, quote = TRUE, sep = " ", eol = “\n”, na = “NA”, dec = “.”, row.names = TRUE, col.names = TRUE, qmethod = c(“escape”, “double”), fileEncoding = “”)
x,也就是要写入文件的变量,必须是数据框或者矩阵;
file,表示要写入的文件的路径,如果是“”的话表示写入console;
append,逻辑变量,如果是TRUE,表示在文件后继续附加,如果是FALSE,则已经存在的文件被破坏。
https://blog.csdn.net/happywlg123/java/article/details/84107258
write.table(x,file = "ren.txt",sep = ",",quote=F)#分隔符改为逗号,字符串不加双引号(默认格式带由双引号)
3.4 变量的保存与重新加载
save.image(file="文件名.RData")#保存当前所有变量
save(X,file="X1.RData")#保存其中一个变量
load("X1.RData")#再次使用RData时的加载命令
注意此处X1得是X数据框中的元素,且注意大小写
3.5 提取元素
- X[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自动补全,但只能提取一列)
3.6 直接使用数据框中的变量
在R语言中,对于串列,数据框中的数据的进行操作时,为了避免重复地键入对象名称,可使用attach或with。
内容有些复杂,需要继续学
结语
R数据结构比较复杂,初接触的我,有非常多不懂的地方,继续加油学习。