r语言join函数不能处理大文件怎么办

Python04

r语言join函数不能处理大文件怎么办,第1张

用R语言作分析时,有时候需要逐行处理非常大文件,各种教材中推荐的read.table 和scan都是一次性读入内存,如果文件有好几个Gb大小,一般电脑肯定吃不消。其实R中可以逐行读取的行数,这里示例一个函数,作为备忘:

con <- file("e:/data.txt", "r")

line=readLines(con,n=1)

while( length(line) != 0 ) {

print(line)

line=readLines(con,n=1)

}

close(con)

如果需要将一行的文字劈成多段,再进行处理,可以用strsplit函数,除此之外,还有一些常用的字符串处理函数,记录如下:

substr(),nchar(), grep(), regexpr(), sub(), gsub()

数据准备

向一个数值型向量中添加一个字符串会将此向量中的所有元素转换为字符型。

is.datatype()用于判断数据类型,返回值为TRUE或FALSE,常见类型包括数值型numeric、字符型character、逻辑型logical、数据框data.frame等。 as.datatype()可将数据类型进行转化。

查看数据类型:mode(), class(), typeof(), storage.mode()

逻辑值转换成数值时,TRUE转换成1,FALSE转换成0。

函数:order(x,decreasing=F,na.last=NA)

x是要排序的数据,可以是数据框也可以是向量,decreasing=F是默认升序,在排序变量前加一个减号可得到降序排序结果,na.last =NA表示将NA元素移到最后,否则,将NA放在第一个。

函数:cbind(A, B) ,不需要指定一个公共索引对数据框进行合并。

cbind:根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符。

merge(A, B) :横向合并两个数据框(数据集),在多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即一种内联结,inner join)。

rbind(A, B) :纵向合并两个数据框(数据集),两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。

rbind:根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符。

函数:dataframe[row indices, column indices] dataframe为要索引的数据框,[]中,前面的是行,后面是列。

在某一列或行的下标之前加一个减号(-)就会剔除那一列或行。

subset(x, subset, select, drop = FALSE, ...)

x是要进行操作的数据框,subset是对数据的某些字段进行操作,select是选取要显示的字段。

sample(x, size, replace = FALSE, prob = NULL)

x表示所要抽样数据,size表示抽样元素个数,replace为T表示采取有重复的抽样,prob用于指定抽样的概率。

参考资料:

merge函数,还有dplyr包中的inner_join()、full_join()、left_join()、right_join()、可以实现,分别对应内连接、外连接、左连接、右连接

目标:A是一个表,B是另一个表,求A-B,也就是A有B没有的数据

这里的A表为data,B表为all,根据uid字段求差集,输出的差集为c表