通过R中的fread读取大型数据集,但只需要一个子集(一个等于某些值的变量)

我正在尝试在R中读取大型数据集(> 30G),但是我的笔记本电脑只有16G的RAM。但是我所需要的只是该数据集的一个子集。具体来说,我需要所有ID(在我的数据集中有一个变量表示此ID)等于某些值(这些值来自另一个数据集)的所有观察值。如果我有足够的RAM,自然会先读取两个数据文件,然后按通用ID合并。

由于缺少RAM,是否可以使用shell命令以某种方式预处理数据文件,以便我可以将其用作cmdfread的参数。还是有人有替代解决方案?预先感谢!

wumeilan 回答:通过R中的fread读取大型数据集,但只需要一个子集(一个等于某些值的变量)

您可以使用 GNU Text Utilities joinsort来伪装R Data Import/Export中所述的数据。

#Create files to use
t1 <- tempfile() #File 1 with id and data
write.table(data.frame(id=1:5,val=5:1),t1,row.names=FALSE,col.names=FALSE)
t2 <- tempfile() #File 2 with id's which should be used from File 1
write.table(c(1,3,4),t2,col.names=FALSE)

t3 <- tempfile()
t4 <- tempfile()
read.table(pipe(paste("sort -k 1b,1",">",t3,"
sort -u -k 1b,t4,"
join",t4)))
#  V1 V2
#1  1  5
#2  3  3
#3  4  2
本文链接:https://www.f2er.com/2980097.html

大家都在问