首页 >编程 >正文

文件的读写20230204

一、csv的打开方式

a)默认:excel

b)记事本

c)适用大文件:sublime

d)R语言 >read.csv(" ") 注意文件的位置,选择相对路径还是绝对路径

二、文件的读入与导出

(1)文件读入

1⃣️ 常用于读取csv格式:read.csv(" " )

2⃣️ 常用于读取txt格式: read.table(" " )

ps(相关读取文件代码的比较):

read.table(file, header = FALSE, sep = "", quote = "\"' ...). 默认没有标题,分隔符是空格 read.csv(file, header = TRUE, sep = ",", quote = "\" ...)。 默认有标题,分隔符是“,” read.csv2(file, header = TRUE, sep = ";", quote = "\" ...) 默认有标题,分隔符是“ ;” read.delim(file, header = TRUE, sep = "\t", quote = "\" ...) 默认有标题,分隔符是“\t”(制表符)

(2)文件导出

1⃣️ 导出csv格式: write.csv(要导出数据框的变量名, file=" example.csv"). example是自己设置的名称

2⃣️ 导出txt格式:write.table(要导出的变量名,file="example.txt")

⚠️注意事项:导出文件时命名最好不要与原文件相同,不然会覆盖,导致原始数据丢失

(3)特殊文件的保存和加载: Rdata

‼️Rdata保存的是变量信息,不是文件!!因此不能x=load("example.Rdata"),变量不能被赋值给其他变量。

保存:save(test,file="example.Rdata)

加载:load("example.Rdata")

总结:

1).R 是脚本文件

2).Rdata 是变量信息

3).Rproj 是包括路径

三、保留列名和行名

保留列名:header=T, 表格自带的列名会变成真正的列名。

文件的读写20230204

ex1<-read.table("ex1.txt")
ex1<-read.table("ex1.txt",header=T)

保留行名:row.names=1,行名也会自动变成真正的行名

ex2 <- read.csv("ex2.csv")
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)

ps: check.names=F 使行名与原始一致。

⚠️注意事项:当使用row.names=1时,行名不允许重复

> rod = read.csv("rod.csv",row.names = 1)
Error in read.table(file = file, header = header, sep = sep, quote = quote,  :   duplicate 'row.names' are not allowed
> rod = read.csv("rod.csv")
> View(rod)

列名重复,故不能使用row.names=1

四、不完整表格的读入

> 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

报错显示:表格第二行没有五个元素,那为什么没有五个元素会报错呢?可以先用excel打开文件看一下

发现果然是从第二行开始第五列都没有数据
> soft <- read.table("soft.txt",header = T,fill = T)

通过搜索发现了fill=T 这个函数,可以在有缺失值的情况下正常读入文件。

但是从826行开始我们发现读入的数据与原表不符合。
原表(空出一列)

因此可以得知,fill=T虽然可以读入文件,但是也会导致“问题文件”的读入错误,因为它的默认值是sep=" ",会把一整个空格认为也是分隔符,导致第五列的内容被错误的放入了空着的第四列。

>soft2 <- read.table("soft.txt",header = T,sep = "\t")
>View(soft2)

加上sep="\t",只会识别一个制表符作为分割,因此可以识别空列

总结:用于读取/导出文件的R包

base包(常用):

read.table() read.csv() read.delim()

write.table() write.csv()

(以下读的速度比较快,适用于大文件)

readr包:

read_table() read_csv() read_tsv()

write_table() write_csv()

(看看read_csv的用法)

> library(readr)> read_csv("ex2.csv")

发现read_csv给出了一些数据框的概况
发现数据类型也变成<dbl>双精度浮点数,保留了小数点一位

data.table包:

fread()

1) 非常方便,可以准确读取一些“问题文件”,例如刚刚有缺失空列的soft.txt,最好带上参数 data.table=F,可以确保产生干净的数据框。

> soft_1<-data.table::fread("soft.txt",data.table = F)

(非常方便,不需要乱七八糟的参数,可以读出复杂的文件)

rio包:

1) import() 可以读入一些后缀不正确的包

eg:首先设置了一个txt文件并把后缀改成mp4,使用普通音频文件打开方式会失败。

分别使用read.table 和read.csv 读取,都可以读取但出现了warning

接下来就可以使用import()函数!!

> import("xh.mp4")
Error: Format not supported  #但是直接import出现了Error,考虑需要加一个参数

> import("xh.mp4",format = " ")
Error: Format not supported   #课上小结老师开始使用的format参数设置为空格也报错了

> import("xh.mp4",format = "\t")  #但是使用"\t"就成功了
 V1         V2
 1 gjl 2018150012
 2 ljh 2017153034

> import("xh.mp4",format = ";")   
V1         V2
1 gjl 2018150012
2 ljh 2017153034

> import("xh.mp4",format = "|")  
 V1         V2
 1 gjl 2018150012
 2 ljh 2017153034
 
 > import("xh.mp4",format = ",")  
  V1         V2
  1 gjl 2018150012
  2 ljh 2017153034

(根据帮助手册,发现好像";" "|" "," 都可以使用,但是会不会和我之前设置文档分割是空格有关,因此我又把文档的分隔换成";"

重新设置分隔为“;”

⚠️⚠️发现原本的分隔符确实可以原原本本的展现,由此可得format的参数可以为“,”(逗号),“|”(管道符),“;”(分号),“\t”(制表符)

2) import_list() 可以读取一个带有多个工作簿的表格文件

>a<-import_list("example.xlsx")
>a$sheet1  #可以通过$sheet读取这个表格文件的不同工作簿

3)export() 可以把一个由多个数据框组成的列表输出为带有多个工作簿的表格文件

ps:如果单个数据框导出,可以把后缀改成.csv.

网友评论

验证码 换一张
取 消
暂无评论...
三日内热门评论文章
关键词
为您推荐
  • 相关阅读
  • 业界资讯
  • 手机通讯
  • 电脑办公
  • 新奇数码
  • 软件游戏
  • 科学探索