【生信技能树培训】R语言中文件的读取

2023-01-12 14:59:39 浏览数 (2)

一、csv格式文件的打开

  1. 用Excel打开
  2. 用记事本打开,打开后显示逗号分割每一列
  3. sublime打开(适用于大文件)

**csv的本质是纯文本文件。**

  1. 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语言中查看。

保存和加载函数:

  1. 保存: save()

格式:save(test, file = 'example.Rdata')

test 为要保存的变量,可以是多个变量,变量的数据结构可以多种。

file参数为给生成的文件指定文件名的参数。

  1. 加载: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")

(五)用于读取/导出文件的R包概览

0 人点赞