前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十、文件读写

十、文件读写

原创
作者头像
叮当猫DDM
修改2023-02-27 14:54:30
1.7K0
修改2023-02-27 14:54:30
举报
文章被收录于专栏:叮当猫学生信叮当猫学生信

一、文件读写(R语言与外部数据的沟通)

1.csv文件的读取方式:

1) excel读取

2) 读取为文本文件

3) sublime(适用于大文件)

4) R语言读取(表格文件读入到R语言里时,就得到了一个数据框,对数据框的修改不会同步到表格文件。

读取的文件名字可以更改,相当于另存为,但又不会覆盖原文件。

尽量不在原文件中进行任何操作)

###文件的格式不是由后缀决定的,是由本身的内容决定的。纯文本文件的后缀没有任何意义,只是约定俗成,起提示作用,不起决定性作用。

1.文件的读取

代码语言:javascript
复制
read.csv()      ##通常用于读取csv格式
read.table()    ##通常用于读取txt格式 

补充知识点 (1)读取工作目录下文件夹中的数据

代码语言:javascript
复制
read.csv("import/gene.csv")     #按tab键,import文件夹、gene.csv就会自动显示

# 工作目录下的已经存在的import文件夹下的gene.csv /表示不同文件夹之间的区分,或者是文件夹和文件之间的划分,表示下一级。

(2)读取不在工作目录下的文件

代码语言:javascript
复制
read.csv("../import/gene.csv")   # ../ 表示上一级文件夹,按tab键import就会出现,再按tab就能找到gene.csv文件

# 工作目录隔壁(上一级(桌面)的另一个下级文件夹import)的下的gene.csv

2.文件的导出

将数据框导出,成为表格文件

不推荐覆盖原文件,让代码可重复,数据可重现
不推荐覆盖原文件,让代码可重复,数据可重现

3.R特有的数据保存格式:Rdata

是R语言特有的数据存储格式,无法用其他软件打开;

保存的是变量,不是表格文件

save() 保存。 load() 加载

代码语言:javascript
复制
save(test,file = "example.Rdata") 
load("example.Rdata")  

## file =不能省略,省略后会报错。因为保存变量的时候可以把好几个变量保存到同一个Rdata里面.

(1)在工作目录下新建文件夹,保存不同形式的文件

输入文件import。 输出文件export

代码语言:javascript
复制
surv=read.table("import/xxx.txt")
save(x,file="Rdata/xxx.Rdata")

(2)在不同工作目录下创建不同的文件夹,保存不同步骤需要的文件,怎么实现不同文件夹之间的衔接

代码语言:javascript
复制
load("../1_data_pre/xxx,Rdata")

4.文件读写部分代码解读

1).读取ex1.txt

代码语言:javascript
复制
ex1 <- read.table("ex1.txt")

##读取文件后发现第一行不是列名,如果不更改,后期数据处理会出现问题。

代码语言:javascript
复制
ex1 <- read.table("ex1.txt",header = T)   #修改后,列名就会正确的归位。

2).读取ex2.csv

代码语言:javascript
复制
ex2 <- read.csv("ex2.csv")     

##读取进来的文件和原文件的差别:1.行名和列名不对(行名没有正确识别,列名多了一个);2.列名中的符号变了;

更改方法: 行名没有正确识别,修改用: row.names =1

列名改变了,修改时用:check.names =F

###为什么列名会被修改,因为在R语言中默认列名不能出现特殊字符,如果有特殊字符,就会转变成.号,

check.names =F 意思是不要检查和修改列名中的特殊字符。

代码语言:javascript
复制
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)

#注意:数据框不允许重复的行名

代码语言:javascript
复制
rod = read.csv("rod.csv",row.names = 1)

Error in read.table(file = file, header = header, sep = sep, quote = quote, : 'row.names'里不能有重复的名字

代码语言:javascript
复制
rod = read.csv("rod.csv")   ###去掉row.names = 1,处理原来的数据框

3).读取soft.txt

代码语言:javascript
复制
soft <- read.table("soft.txt")

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 2 did not have 5 elements

报错原因:表格不规则,有一部分位置是空着的。

代码语言:javascript
复制
soft <- read.table("soft.txt",header = T,fill = T)  #其实不对,读取完的数据有一部分列是错误的

##read.table 这个函数中有个 sep="" 参数,sep=空字符串,只要两个数据之间分割符号是看不见的就会被当成一整个分割符号(比如一个空格,两个空格,一个制表符,两个制表符都看不到),需要做以下修改。

代码语言:javascript
复制
soft2 <- read.table("soft.txt",header = T,sep = "\t")
soft2 <- read.delim("soft.txt")      ## header = T,sep = "\t" 默认值可以不写,两者输出结果一样。
###一些函数的默认参数值
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 = "", ...) 

4).soft 的行数列数是多少?列名是什么

代码语言:javascript
复制
dim(soft)

[1] 1000 5

代码语言:javascript
复制
colnames(soft)

[1] "ID" "SEQUENCE" "GeneName" "GB_ACC" "SPOT_ID"

5).将soft导出为csv

代码语言:javascript
复制
write.csv(soft,file = "soft.csv")   

###右上角环境中刚好出现了一个soft.csv的文件,并且刚好与数据框soft中的内容一样,

6).将soft保存为Rdata并加载。

代码语言:javascript
复制
save(soft,file = "soft.Rdata")    

###load的结果是让Rdata中的变量出现在环境中

代码语言:javascript
复制
rm(list = ls())      

###上一步刚把文件保存,soft.Rdata的文件还在环境中存在,此时load,看不出来任何变化,需要提前清空环境,或者重启session。

代码语言:javascript
复制
load(file = "soft.Rdata")    

####文件的格式由生成它的函数决定,不是由文件的名字决定的。

###小技巧:

代码语言:javascript
复制
# data.table   读取任何形式的文件 ,包括问题文件
soft = data.table::fread("soft.txt",data.table = F)   #正常文件
soft = data.table::fread("abc.mp4",data.table = F)    #问题文件
# rio
library(rio)  
a = import("complete_set.txt")        #正确文件
##不能读取问题文件,需要加上参数才能读取成功
a = import("abc.mp4",format = "\t")   ##这个能读取成功
b = import_list("jimmy.xlsx")    
###import_list 可以读取多个工作簿sheet的excel文件。读取后是列表,然后对列表取子集。
b$Sheet1
b[[1]]
export(b,"jimmyzhenbang.xlsx")    ###导出含有多个工作簿sheet的excel文件
export(b$Sheet1,"jimmyzhenbang.csv")   ###只导出工作簿sheet1

练习5-1:

6.加载y.Rdata(已保存在工作目录),求gene1列的平均值.

代码语言:javascript
复制
load("y.Rdata")
View(y)
mean(y$gene1)   #####Rdata是矩阵, 也可以是数据框、列表等任何形式的文件

Error in y$gene1 : $ operator is invalid for atomic vectors

代码语言:javascript
复制
class(y)      

[1] "matrix" "array"

###。class不能识别文件名称,是只能识别数据的函数。

判断数据类型的时候不带引号,不带后缀。比如class(c),class(x)

而class(“exercise.csv”), 就会反馈出来 “character”,把任何东西,无论对错,放进class里面,反馈出来都是“character”。

代码语言:javascript
复制
mean(y[,1])

[1] NA

Warning message:In mean.default(y[, 1]) : 参数不是数值也不是逻辑值:回覆NA

代码语言:javascript
复制
y[,1]      

GSM1 GSM2 GSM3 GSM4 GSM5 GSM6 #####行名出现在这里没有任何影响,只是一个名字而已

"40" "20" "51" "46" "38" "49" ###有用的是下面这一行字符串

代码语言:javascript
复制
y[,1] = as.numeric(y[,1])
y[,1]
mean(y[,1])

[1] GSM1 GSM2 GSM3 GSM4 GSM5 GSM6

"40" "20" "51" "46" "38". "49"

[1] NA Warning message:In mean.default(y[, 1]) : 参数不是数值也不是逻辑值:回覆NA

###转换不成功,y是矩阵,字符型矩阵。不允许转换其中一列或者一行,要改除非整个矩阵一起改.

###只有把整个矩阵转换成数据框。但是y中有字符型向量,有数值型向量,所以本身文件有问题,平时自己处理文件的时候直接输出为数据框、列表都可以。不保存为矩阵。

代码语言:javascript
复制
mean(as.numeric(y[,1]))

[1] 40.66667

代码语言:javascript
复制
c <- y[,1]
mean(as.numeric(c))

[1] 40.66667

以上内容均来自于生信技能树的学习。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、文件读写(R语言与外部数据的沟通)
    • 1.文件的读取
      • 2.文件的导出
        • 3.R特有的数据保存格式:Rdata
          • (1)在工作目录下新建文件夹,保存不同形式的文件
          • (2)在不同工作目录下创建不同的文件夹,保存不同步骤需要的文件,怎么实现不同文件夹之间的衔接
        • 4.文件读写部分代码解读
          • 1).读取ex1.txt
            • 2).读取ex2.csv
              • 3).读取soft.txt
                • 4).soft 的行数列数是多少?列名是什么
                  • 5).将soft导出为csv
                    • 6).将soft保存为Rdata并加载。
                    • ###小技巧:
                    相关产品与服务
                    文件存储
                    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档