一、csv格式文件的打开
- 用Excel打开
- 用记事本打开,打开后显示逗号分割每一列
- sublime打开(适用于大文件)
**csv的本质是纯文本文件。**
- R语言中读取CSV
如:
代码语言:text复制test= read.csv('ex3.csv')
即将ex3.csv中的内容提取出来,传递给变量test,生成一个数据框。后续对数据框的操作,对文件无影响。
**Tips:**关于文件后缀
CSV = Comma Separated Values,即逗号分隔符文件
TSV = Tab Separated Values, 即制表符分隔文件
对于纯文本文件来说,后缀没有意义,只是约定俗成,起提示作用的标识。
二、R语言读取文件的函数
read.csv() : 通常读取csv格式,但也可以读取其他纯文本文件
read.table() : 通常用于读取txt格式文件
三、 将数据框导出为文件
(一)导出为表格文件
函数:
csv格式:write.csv(test, file = 'example.csv')
txt格式:write.table(test, file= 'example.txt')
(二) 导出为R特有的数据保存格式
文件后缀:.Rdata
- 文件里存储的是变量,而不是表格。
- 使用其他软件无法打开,只能在R语言中查看。
保存和加载函数:
- 保存: save()
格式:save(test, file = 'example.Rdata')
test 为要保存的变量,可以是多个变量,变量的数据结构可以多种。
file参数为给生成的文件指定文件名的参数。
- 加载:load()
格式: load('example.Rdata')
load函数加载文件的时候,不需要赋值。load是将文件中的变量加载到环境中。
**Tips:**
加载的时候,文件在工作目录以下的目录时,输入文件名用Tab补全时,会自动补全其相对路径。
也可以通过../...... 来指定上一层级目录的文件的读取。
四、实例
(一)自动识别列名
代码语言:text复制ex1 <- read.table('ex1.txt')
#会生成列名V1,V2,V3……
ex1 <- read.table('ex1.txt', header=T)
#默认情况下,参数header为FALSE,将header改为TRUE,则将第一行识别为列名。
(二)行名与列名的正确识别
代码语言:text复制ex2 <- read.csv('ex2.csv')
#会将行名作为第一列导入。
#列名中的“-”符号会转换成点(.)
ex2 <- read.csv('ex2.csv', row.names = 1, check.names = F)
#row.names为指定哪一列作为行名。
#!!!数据框不允许重复的行名!!!
#check.names设定是否检查行名与列名并转换特殊字符
(三)文件内容的完整性、准确性识别
代码语言:text复制soft <- read.table('soft.txt', header = T, fill = T)
#当文件有行是空的时候,若不指定fill参数,则读取文件会报错,即无法成功读取文件。
#当指定fill参数为TRUE时,读取文件时,会自动将空行的地方填充成NA。但是,当出现某些行间隔空缺的时候,会将空行后一列的内容补充到前一列的空行中来,从而造成数据错乱。见下图。
单独指定fill参数为TRUE时,E列中826行开始的内容会被移动到D列的空行中。见下图。
**原因在于,用纯文本查看文件时会发现,在862行之后的第4列与后面的内容之间有两个制表符分隔。Excel可以正确识别两个制表符,知道两列之间有一个空列,而R语言中该函数无法识别。**
查看read.table函数的参数默认值可以发现:
read.table(file, header = FALSE, sep="")
sep参数默认指定空字符串为分隔,实际上是指将**看不见**的字符串都识别为分隔符(两个制表符连在一起显示出来是看不见的,算作一个)。
**因此,需要具体指定分隔符。**
代码语言:text复制soft <- read.table('soft.txt', header = T, sep='t') #此时不需要再指定(fill参数)是否填充空单元格了
(四)导入后的查看和另存为
代码语言:text复制> #4.soft 的行数列数是多少?列名是什么
> dim(soft)
[1] 1000 5
> colnames(soft)
[1] "ID" "SEQUENCE" "GeneName" "GB_ACC"
[5] "SPOT_ID"
> #5.将soft导出为csv
> write.csv(soft,file = "soft.csv")
> #6.将soft保存为Rdata并加载。
> save(soft,file = "soft.Rdata")
> rm(list = ls())
> load(file = "soft.Rdata")