R语言︱读取文件的一些方法一览(批量xlsx文件、数据库、文本txt、文件夹

 2024-01-22 02:02:23  阅读 0

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]来表示空格

文本中自动换行_自动换行字符_code文本超出自动换行

—————————————————————————————————————————————————— ————————————

读入八个文件夹

读取文件夹的方法有很多种。

第一步:获取文件夹中所有文件的内容

两个函数: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”目录已经创建完成。

code文本超出自动换行_文本中自动换行_自动换行字符

3、确认目录正确后,输入“type *.txt >>f:\111.txt”。 该命令会将当前目录下所有txt文件的内容输出到f:\111.txt。

code文本超出自动换行_文本中自动换行_自动换行字符

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是一个主要用于移动的函数。 它是一个路径名(具体为文件名和后缀),也可以是文件夹名。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码