R语言︱读取文件的一些方法一览(批量xlsx文件、数据库、文本txt、文件夹)
小规模读取数据的方法相对简单且多样。 不过目前批量读取的方法有几种:xlsx封装、RODBC封装、批量转换为csv再读取。
R语言中还有一些其他比较常见的读取,比如代码包、R文件、工作区等。
#读取R代码
dget #读取R文件
加载#Read工作区
—————————————————————————————
读取SPSS-STATA格式的包——
从其他软件读取格式
.("")
#读取SPSS stata sas
—————————————————————————————
1.小规模数据——简单读取方法
read.table、write.table、read.csv、write.csv(常用字符格式)。
常见格式:
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
read.table(文件, = FALSE, sep = "", quote = "\"'",
十进制 =“.”,跳过 = 0,
strip.white = FALSE,blank.lines.skip = TRUE,
.char =“#”)
在:
file代表要读取的文件,有一个神级的读取方法(file.()):
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
读.表(文件.())
判断数据文件第一行是否为表头;
sep指定分隔符,默认为空格;
quote是引号,默认是双引号;
dec是小数点的表示,默认是一个点;
判断是否跳过某些行;
strip.white决定是否消除空白字符;
Blank.lines.skip 决定是否跳过空行;
.char 指定用于表示注释的前导符号。
使用read.table和read.csv读取字符数据时,会出现很多问题:
1.问题1::EOF; 需要设置quote,read.csv("/..csv",quote = "");
2.问题2:所有数据似乎都用双引号括起来,例如“Hello”和“Sleep”;
解决办法:首先as.(x[1:5]),可以找到“\”Hello\””这样的格式,可以用sep = “\””来解决。
非结构化数据中,读取时会出现很多分隔符问题。
—————————————————————————————————————————————————— ————————————
2.数据库读取-RODBC包
RODBC包基本上可以处理数据库读取。 一般数据数据库读取流程主要包括:
连接数据库()、读取某表()、读取某表的某索引()、关闭连接(close)
还有一些功能:
将R数据读入数据库(),删除数据库中的表()
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
#安装RODBC包
.(“RODBC”)
(RODBC)
mycon #通过数据源名称(mydsn)、用户名(user)和密码(rply,如果没有设置可以直接忽略)打开ODBC数据库连接
数据()
#将R自带的“”表写入数据库
(mycon,,="状态",addPK=TRUE)
#保存数据流,然后打开SQL就可以看到新创建的表
R M()
#清除变量
(mycon,“”,=“状态”)
#输出表的内容
(mycon,“*来自”)
#对表执行SQL语句并输出结果
(,"")
#删除表
关闭(mycon)
#关闭连接
—————————————————————————————————————————————————— ————————————
3.批量读取-xlsx包
首先尝试用R包来解决。 那是 xlsx 包。
xlsx包在加载时容易出现问题。 基本上是因为Java环境没有配置好,或者环境变量引用失败。 因此,首先要配置java环境并加载rJava包。
百度了一下,网上有很多解决方案。 我主要参考这个帖子,步骤是:
1.安装最新版本的java。 如果您使用的R是64位的,请下载64位java。
下载链接:
它应该安装在 C:\Files\Java 下。 对于win8,特别注意不要安装为C:\Files(x86)。 可能是R读取路径时,不太容易识别x86等文件夹。 我第一次在x86上安装时,读取失败。
2.在R中加载环境,就是一行代码。 路径必须根据您的java版本进行更改。
Sys.(='C:\\Files\\Java\\jre1.8.0_45\\')
然后成功加载rjava包或xlsx包。
xlsx包加载成功后,可以使用read直接读取xlsx文件。
但这种方法有两个问题:
1、并不是所有公司电脑都可以自由配置Java环境。 许多人的权限有限。 而且,公司的一些内部应用程序是在Java环境中配置的。 即使你要求IT安装Java,一些内部应用程序也可能会因为版本号兼容性问题而出现错误,从而导致得小失大。
2、数据量比较小时,使用xlsx包读取数据比较快。 但如果xlsx本身比较大,包含的数据很多,那么read.xlsx的效率会很低,而且不如data.table包的fread快且省内存。 但fread函数不支持读取xlsx。 。 。
(参见这篇文章,其中fread对于千万行数据只需要10秒左右,比常规read.table或read.csv至少耗时两倍)
综上所述,由于Java环境的复杂性和兼容性,以及xlsx包本身读取速度的限制,使用xlsx包读取xlsx包的方法比较适合:
1.个人电脑,想怎么玩都无所谓,或者高端的Linux或者mac环境
2、数据量不会特别大,而且excel文件很干净,需要详细操作。
实际操作案例:
批量写入
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
#1. 阅读 xlsx 中的所有工作表
#如果你这样定义List会怎么样? ? ——List()函数主动定义,使用data.list[[i]]赋值
data.list for (i in 1:2){
data.list[[i]]=read.xlsx("C1.xlsx",i)
分批写出
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
#3。 使用List读取批量操作
#难度:如果构造输出表的名称-粘贴构造名称
飞=列表()
=粘贴(1:2,".xlsx",sep="")
for(i in 1:2){
flie[[i]]=paste("C:/Users/long//",[i],sep="")
write.xlsx(data.list2[[i]],文件)
发生了一个小错误:文件 [[i]] 中的错误:类型为 '' 不是
这个错误是因为我写错了函数名...file->flie(具体参见:)
主要使用列表功能。 详情参见:R语言︱列表使用、批量读取、写入数据时的使用
—————————————————————————————————————————————————— ————————————
4.批量读取XLSX文件——先转为CSV再读入
CSV读入速度更快。我这里编译的是使用EXCEL VBA将xlsx转换为csv,然后使用read.csv导入的方法。
在WPS中调用VBA需要下载额外的插件。
然后使用list.files以List模式读取。
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
#阅读方法
#如果没有full.names = TRUE,打开的文件会出现:No such file 或者
名称=(x) {
读取.csv(x,=T)
—————————————————————————————————————————————————— —————————
5、批量读取文件夹内指定文件(如*.xlsx)
代码思路:先遍历文件夹(list.files),然后通过循环依次读写(read.xlsx)。
为什么lsit.files不能直接读取完整数据到文件中? ——read.xlsx这一步是必填项
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
##批量读取文件夹中的xlsx文件
#如何批量读取文件夹中的各种txt文件
##将文件信息放入列表中
文件=列表()
对于(1:2中的i){
文件[i]=read.xlsx([[i]], = F,1)
—————————————————————————————————————————————————— ————————————
5、批量读取文件夹中的文本文件(*.txt)并生成名称和文档数据框
——情感分析中使用的情感词得分
代码思路:首先遍历文件夹中所有txt(list.files),构造文本读取函数(read.txt),找到文本名称(list.files),然后生成数据框(as.data.frame)
[普通] 查看普通副本
打印?在 CODE 上查看代码片段 派生到我的代码片段
##批量读取txt文件,并将文本放入同一个数据框中
R语言/R语言与文本挖掘/情感分析/数据///》
######批量读取文本
read.txt des (paste(des, = "")) #如果没有,则返回最后一个函数对象
#如果程序出现警告,可能是因为某些文件的最后一行没有换行符,不用担心。
######列表到数据框
=F)
其中,list.files()中,full.names=T代表读取文件+信息,full.names=F代表读取文件名。
这段代码来自《数据挖掘之道》一书的情感分析章节。
—————————————————————————————————————————————————— ————————————
6.Excel的xlsx格式读取-封装
可以与xlsx包进行比较。 为什么没有特别好的excel包呢? 由于微软的软件不是开源的,而且嵌入的设置时长各异,所以有没有一个统一的、好的功能包可供阅读。
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
()
数据=read.xlsx("hsb2.xlsx",sheet=1)
—————————————————————————————————————————————————— ————————————
7. write.table读取txt文本
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
write.table(数据,"名称",
quote = F,row.names = FALSE,col.names = FALSE)
输出结果可能类似于 Excel 列表:
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
ID名称
1 “你好”
2“格式”
3、“读”
因此,您需要删除行名和列名,并删除双引号。
如果我想要这种格式怎么办:
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
你好格式阅读
Ecol 需要调整。 默认的ecol="\n"是回车符,所以会导致换行,所以需要改为“\r”。 同时中间需要有一个空格,所以最后ecol="\r\"使用[\ +space]来表示空格
—————————————————————————————————————————————————— ————————————
读入八个文件夹
读取文件夹的方法有很多种。
第一步:获取文件夹中所有文件的内容
两个函数:dir() 和 list.files()
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
dir('C:\\Users\\long\\\\', = "txt$")
ist.files('C:\\Users\\long\\\\', = "txt$")
同时,您可以通过选择指定格式的文件内容。
步骤2:生成系统路径
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
> 粘贴("C:\\Users\\long\\\\","txt")
[1]“C:\\Users\\long\\\\txt”
> file.path("C:\\Users\\long\\","txt")
[1]“C:\\Users\\long\\/txt”
对比两者,一般在使用paste生成系统路径时,合并后的最终结果会多出一个空格。 当然,你也可以使用去掉空格的方法来排除,但是这样还不够好。
因此可以直接使用file.path生成,更加方便,而且绝对正确。
—————————————————————————————
应用一:R语言读取大样本并生成txt文件
作者进入分词流程后,文本包含3亿+单词。 当我导出到txt时,电脑立刻死机,报内存不足的问题。
所以我正在寻找各种方法来解决如何生成整个TXT文件。 于是就有了下面这些比较简单的方法,可以直接实现。
第一步:首先将分词内容拆分成几部分,输出到多个txt文件中;
步骤2:使用内置CMD中的指令生成特定的TXT文件。
1、使用组合键“Win+R”打开运行窗口,输入“cmd”命令进入命令行窗口。
2. 在命令行窗口中,输入需要合并的Txt文件的目录。 如下图所示,“F:\stock”目录已经创建完成。
3、确认目录正确后,输入“type *.txt >>f:\111.txt”。 该命令会将当前目录下所有txt文件的内容输出到f:\111.txt。
4、此时打开合并后的f:\111.txt,会看到多个Txt文件已按顺序合并到F盘的111.txt文件中。
————————————————————————————————————————————
应用2:R语言中,使用write.csv时,使用open时,多了很多行?
如果文本字符长度很大,那么内容将被串到下一行。 例如,10行内容可能会变成15行。 看来默认情况下单个单元格的字符一般不会超过2500个字符,超过的话就会交给下一行。
所以当作者导入5W条数据时,有很多多余的行,所以我不得不手动删除它们。
如果导出为txt格式,用++打开还好,但是用excel打开会增加很多额外的行,所以用excel打开成本很高。
然而,由于excel是导入SQL的最佳格式,所以我不得不手动删除它并牺牲一些内容。
————————————————————————————————————————————
应用3:R语言中,用tcltk读取时,报错?
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
错误:(Java):Java 堆空间
因为从错误信息来看,是因为你使用的报表占用内存过多(不够或者没有释放),导致堆内存溢出。
解决办法从两个方面入手,1、增加内存如-; 2.检查优化代码,及时释放内存。
————————————————————————————————————————————
应用四:使用R语言移动图像文件——file.copy
[html] 查看纯文本
打印?在 CODE 上查看代码片段 派生到我的代码片段
对于(1中的i:()){
= 粘贴(,[i],sep = '')
= 粘贴(,[i],sep = '')
文件.copy(, )
可以看到file.copy是一个主要用于移动的函数。 它是一个路径名(具体为文件名和后缀),也可以是文件夹名。