数据结构
昨天安装R提及到了数据的类型
https://www.jianshu.com/p/c16e9351f083
今天继续学习花花老师的教程
https://www.jianshu.com/p/5f93d48a63ac
向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数 c()
可用来
创建向量。
矩阵
矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通
过函数matrix
创建矩阵。
数组
数组(array)与矩阵类似,但是维度可以大于2。数组可通过array
函数创建,形式如下:
myarray <- array (vector,dimensions,dimnames)
其中vector
包含了数组中的数据,·dimensions
是一个数值型向量,给出了各个维度下标的最大值,
而dimnames
是可选的、各维度名称标签的列表。
数据框
由于不同的列可以包含不同模式(数值型、字符型等)的数据,数据框的概念较矩阵来说更为一般。它与你通常在SAS、SPSS和Stata中看到的数据集类似。数据框将是你在R中最常处理的数据结构。数据框可通过函数data.frame()
创建.
列表
列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表。
数据的输入
向R中导入数据的权威指南参见可在
http://cran.r-project.org/doc/manuals/R-data.pdf下载的R Data Import/Export手册
1.使用键盘输入数据
也许输入数据最简单的方式就是使用键盘了。R中的函数edit()会自动调用一个允许手动输
入数据的文本编辑器。具体步骤如下:
(1) 创建一个空数据框(或矩阵),其中变量名和变量的模式需与理想中的最终数据集一致;
(2) 针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回此数据对象中。
假设创建一个名为mydata的数据框,它含有三个变量:
age(数值型)
、gender(字符型)
和weight(数值型)
。
然后你将调用文本编辑器,输入数据,最后保存结果。
mydata <- data.frame(age=numeric(0),
gender=character(0), weight=numeric(0))
mydata <- edit(mydata)
2.从带分隔符的文本文件导入数据
使用R语言的时候,如果是少量数据,不妨使用c()或其他函数进行创建;但是对于大量数据,最好还是先通过其他更方便的软件创建数据文件,然后使用R读入这个文件。
R语言中读取外部文件的最基本函数是read.table(),
先说read.table()
,
再讲专门用来读csv的read.csv()
。
可以使用read.table()
从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。
敲入?read.table
命令,就看到了关于数据输入函数的说明。
read.table(file, header = FALSE, sep = "", quote = "\"'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.csv2(file, header = TRUE, sep = ";", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
read.delim(file, header = TRUE, sep = "\t", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.delim2(file, header = TRUE, sep = "\t", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
以老师给的 "huahua.txt","doudou.txt"
1.读取本地数据
read.table(file = "huahua.txt",sep = "\t",header =T) #读取文件,分隔符为Tab,有表头
a<-read.table(file = "huahua.txt",sep = "\t",header =T)#把这个数据框赋给一个变量a
header
是一个表明首行是否包含了变量名的逻辑值。sep
用来指定分隔数据的分隔符。
2.设置行名和列名
X<-read.csv('doudou.txt')
colnames(X)
rownames(X)
colnames(X)[1]<-"bioplanet"
X<-read.csv(file = "huahua.txt",sep = "\t",header =T,row.names=1)
``` read.csv```的用法
read.csv(file, header = TRUE, sep = ",",quote="\"", dec=".",
fill = TRUE,comment.char="")
csv就是逗号分割的意思,当然sep必须是逗号。header也是默认有标题的。fill是默认填充的,即遇到行不相等的情况,空白域自动添加既定值。
从当前工作目录中读入了一个名为X<-read.csv('doudou.txt')
从文件的第一行取得了各变量名称,将变量1
指定为行标识符,最后将结果保存到了名为huahua
的数据集中,row.names
的意思是修改第一列为行名,参数sep
允许你导入那些使用逗号以外的符号来分隔行内数据的文件,
可以使用sep="\t"
读取以制表符分隔的文件,
这参数的默认值为sep=""
,即表示分隔符可为一个或多个空格、制表符、换行符或回车符。
3.数据框的导出
write.table(X,file = "yu.txt",sep = ",",quote=F)#分隔符改为逗号,字符串不加双引号(默认格式带由双引号)
4.保存与重新加载
save.image(file="bioinfoplanet.RData")#保存当前所有变量
save(frame1,file="frame1.RData")#保存其中一个变量
load (frame1.RData)#使用时的加载命令
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$列名#也可以提取列
X是指的一个变量名,实际应用要懂得替换成相应的数据。
6.直接使用数据框中的变量
a <-data.frame(case=paste("S",c(1:50)),values=runif(50))
> plot(a$case,a$values)
实际上,你跑完会发现数据框名a
在代码中重复出现。
解决:
方法1:attach
将数据框名添加到搜索环境中:attach(a)
,作图时就只需输入列名(连$都不用了)。
attach(a)
plot(case,values)
做完后将a删除出搜索环境detach(a)
局限性:两个以上数据框的列名有冲突时,同时attach
会报错。
方法2:with
with(c,{
+ plot(case,values)
x<<-summary(values) #求和并赋值给x,<<的意思是作为全局变量,y也就是出了with循环仍有效。
})
x #运行完后打印x
网友评论