R语言中文件或数据的读写

12 篇文章 2 订阅

系统数据的读写

save(a,b,file="test.RData")#写出
load("test.RData")#读入

xlsx文件的读写

编码问题:在excel保存文件的时候选择UTF-8格式,因此,在R中读取的时候,指定编码类型为UTF-8
表格索引问题:读取指定表的内容,可以通过下标索引,也可以通过表的名称。即 sheetIndex 或者 sheetName ,前者参数为纯数字,后者是字符串。这里的sheet不能是中文名!
写入问题:在利用== write.xlsx==进行写入时,append=T表示在工作簿中追加一个新的sheet.

正确的一个实例如下:

library(rJava)
library(xlsx)
filename="C:/Users/zoujiahuibin/Desktop/work.xlsx"
data=read.xlsx(filename,sheetIndex=1,startRow=1,endRow=3,colIndex=c(1,2,3),encoding = "UTF-8")
write.xlsx(data, filename2, sheetName="Sheet1", col.names=T, row.names=F, append=F, showNA=F, password=NULL)

举例说明

**问题:**将一个xlsx表中第一行添加一个条目,并写入再另一个xlsx文件中
原始数据:
在这里插入图片描述

具体代码

library(rJava)
library(xlsx)
filename="C:/Users/zoujiahuibin/Desktop/zou/hui.xlsx"
filename2="C:/Users/zoujiahuibin/Desktop/zou/jia.xlsx"
data=read.xlsx(filename,sheetIndex=1,startRow=1,endRow=3,colIndex=c(1,2,3),encoding = "UTF-8")
addline=data.frame(数量='5克',单价='102元/克',总价=510)
data2=rbind(addline,data)
write.xlsx(data2, filename2, sheetName="Sheet1", col.names=T, row.names=F, append=F, showNA=F, password=NULL)

结果如下

在指定位置创建了一个新的文件jia.xlsx
在这里插入图片描述

csv文件的读写

读取csv文件

对csv文件中的数据进行读取时,经常使用的是read.table()csv.read()
不管是逗号格式还是空格格式,都可以成为read.table()和read.csv()的数据源,那么区别就在于列数不对等这个需求了,对于read.table()严格要求所有列都对等,而read.csv()并不要求,后者会按最大列,或指定的列数填充,空串可指定相应的字符或数字填充。

当CSV文件中包含中文时,有时候会读取出错,这是需要这是encoding=‘UTF-8’或者‘GBK’。如果设置解码方式仍然不行,可以考虑用记事本另存的功能改变CSV文件的编码方式。

写入csv文件

1.基础包中的write.csv()没有追加(append)功能
2.如果想在csv文件中实现追加功能可以使用write_csv()
实例如下:

install.packages("readr")  
library("readr")       
write_csv( x , path , col_names = TRUE , append = TRUE )

其中,
x 是A data frame to write to disk 即数据框
path 是Path or connection to write to即文件路径名

使用readr包读取csv文件

readr包中的read_csvwrite_csvread.csvwrite.csv的升级版,读写速度快并且功能强

使用data.table包读取csv文件

data.table包是目前R读取csv文件最快的包
未完待续…

scan函数

scan不仅可以从文件中读取数据还可以从键盘输入中得到数据。

scan()函数的使用语法

scan(file = “”, what = double(0), nmax = -1, n = -1, sep = “”, quote =
if(identical(sep, “\n”)) “” else “'”", dec = “.”, skip = 0, nlines =
0, na.strings = “NA”, flush = FALSE, fill = FALSE, strip.white =
FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE,
comment.char = “”, allowEscapes = FALSE, fileEncoding = “”, encoding =
“unknown”,text, skipNul = FALSE)

参数含义描述

(1)file

file参数用于指定要读取文件的路径和名字,如果为空或"",则是要从键盘中获取数据。

如果指定的文件的名字使用的是相对路径,则默认是从当前工作目录中寻找文件(当前工作目录可以使用getwd()函数获取到);

如果指定了绝对路径,则scan()函数要按照绝对路径读取文件。

(2)what

what用于给出要读取的数据的类型,支持的数据类型包括:logical, integer, numeric, complex,
character, raw以及list.

(3)nmax

是一个整型值,用于指定要读取数据的最大数量,如果what被指定为列表(list),则nmax表示要读取的最大记录数或行数,如果忽略nmax参数,或该参数被指定为非负整数,或者该参数被设定为无效值时(同时,nlines参数没有被设定为负数时),scan函数将会读取到该文件的末尾。

(4)n

是一个整型值,要读取的数据的最大数量,默认情况下没有限制。若指定无效的值,将会被忽略。

(5)sep

sep参数是用于指出文件中数据的分隔符,scan默认数据是以空白进行分隔,另外,也可以指定其它单个字符作为数据域的分隔符

(6)quote

用于指定包围字符串的字符,该参数应该是一个单字符。

(7)dec

用于表示小数数点的字符,该参数只能是包含单个字符的字符串或零长度的字符串。默认为“.”。

(8)skip

用于指定读取数据时,忽略文件前面的行数。

(9)nlines

指定要读取文件中数据的最大行数。

(10)na.strings

字符向量。用于指定表示缺失数据时的字符串,默认为NA。在逻辑型、整数型、数值型和复数型数据域中,空白域也被看做缺失值。

(11)flush

是一个逻辑值,默认为FALSE。如果该参数设置为TRUE,则scan()函数读取完指定列数后将转到下一行。这允许用户在最后一个字段后面添加注释。

(12)fill

逻辑值。如果参数值设置为TRUE时,当行中的字段值少于字段数时,将以空白填充。

(13)strip.white

在sep参数已指定的情况下,如果为TRUE,则删除字符型字段前后多余的空格。但包含在引用中的空白不会被删除,同时数值型字段值前后的空白在任何情况下都会被去掉。

(14)quiet

是一个逻辑值,当设置为FALSE时,scan()函数将输出一行信息,用于说明读取了哪些项的信息。

(15)blank.lines.skip

是一个逻辑值 ,如果设置为TRUE,将忽略空白行

(16)multi.line

是一个逻辑值。只用于what参数是一个列表型参数时。当设置为FALSE时,每个记录的字段都在一行中。

(17)comment.char

指定注释开始的字符。一行中以这个字符开头的部分将被忽略。默认关闭此项。

(18)allowEscapes

该参数是一个逻辑值,默认值为FALSE。表示在一个引用起来的字符串中,类似“\n”这样的字符被解释为转义字符还是按原样输出(字面意义或逐字字符串)。若不在引号中,这样的字符将视为字段分隔符。

(19)fileEncoding

字符串类型,指定文件的编码方式。如果指定了该参数,则文本数据按照指定的格式重新编码。

(20)encoding

对输入的非ASCII字符按照指定的编码格式编码。

(21)text

字符串类型。if file is not supplied and this is, then data are read from the
value of text via a text connection.

(22)skipNul
逻辑值。是否忽略空值。

实例:

在这里插入图片描述
可以使用下面的语句从该文件中读取出数据:

(1)scan("student.txt", what="c") #以字符串的格式读取数据

(2)scan("student.txt", what="c", nlines=3) #读取3行

(3)scan("student.txt", what="c", skip=1) #忽略第1行

以上的执行情况如下图所示:

在这里插入图片描述

(4)scan("student.txt", what = list(studentNo="", studentName="", studentSex="", studentAge=0), skip=1) #以列表的形式读取数据

在这里插入图片描述
这种格式,可以将文件中的数据按照变量(字段)读取到列表中,在实际应用中就方便多了。

(5)lst <- scan("student.txt", what = list(xh="", xm="", xb="", nl=0), skip=1) #读取数据并保存到变量中

在这里插入图片描述
CSV文件,默认是以逗号进行分隔的数值文件。将Excel文件另存CSV格式的文件后,可以使用R语言的scan()函数读取其数据。

使用scan()函数读取csv格式的文件,与读取文本型数据没有多大区别,不过要指定逗号作为分隔符。

csv 格式的数据通常是表格数据,用read.table可直接读入。
表格数据不适合用scan函数来读取,因为scan读入的数据是存放在一个向量中的,所有读入数据按照转换规则转换为同一数据类型。如果非要用scan读入,必需要做大量的逐列处理,得不偿失了。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值