文章目录
系统数据的读写
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_csv
和write_csv
是read.csv
和write.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读入,必需要做大量的逐列处理,得不偿失了。