首页 > 解决方案 > 通过多个特定字符拉取大数据子集

问题描述

我有一个大型数据库,它将文件分成块以便于分析/存储,并且我试图从单个列中提取以字符格式存储的多个特定值,以获取整体数据的一部分以进行进一步分析。

在这些文件中,我有兴趣拉出所有行,其中“Cat”列等于任意数量的字符(每个拉取和每个文件都不同)。

文件设置(例如)为:

2001_x.sas
2002_x.sas
....
2018_x.sas

目前,我正在执行以下操作:

#Create a list of files- fill out pattern to chose specific files with similar names
    'x<-list.files(pattern = "_x.sas")'
#Read and subset files when Cat is C21 C98 or D27 etc 
    'z<-lapply(x, function(x) {
      a<-read.sas(x)
      c<-subset(a, (Cat=="C21" | Cat=="C98 | Cat=="D27))
      })'

#Bind df's into master df
    'y<-bind_rows(z)'

y 是一次从多个文件中提取的非常好的方法。由于总数据集为数 TB,这样做的好处是它可以在单个文件中工作,并且不会压倒我桌面上的内存。

问题是我不能总是使用只有三个值的 Cat 等于变量。有时,我需要输入数百个值,这非常繁琐。我试过用列表或向量替换它。

理想情况下,如果您知道我的意思,我希望代码看起来更像这样,但这不起作用:

'b<-List or vector with character values of interest
z<-lapply(x, function(x) { a<-read.sas(x) subset(a, Cat==any(b)) }) 
y<-bind_rows(z)'

这样,如果列表 b 中的任何值等于 Cat。但是,我只能让它与 Cat 等于变量和 or 符号一起使用。

谢谢!

标签: rsubsetextractlapply

解决方案


推荐阅读