【发布时间】:2015-12-15 19:07:44
【问题描述】:
我正在处理大约 700 个大型数据集(每个数据集有大约 80 个变量和多达 200k 行)。大多数变量只允许在某个范围内或为某个值。每个数据集中都有一些错误,其值不符合这些规则。
所以,我需要以某种方式找到这些错误并将它们设为 NA。目前我正在这样做:
library(data.table)
dataset$variable[!dataset$variable %in% c(1,2,3)] <- NA
# or
dataset$variable[!(dataset$variable >= 0 &
dataset$variable <= 150)] <- NA
... # for 80 variables
我的问题是应用这些规则需要一些时间(最多 10 秒),我想加快这个过程。您有任何想法如何提高效率吗?或者这已经是最简单的方法了,我必须处理它?
非常感谢您!
编辑:我想知道例如:迭代行而不是列会更快吗?
【问题讨论】:
-
您可以尝试使用
data.table包。在改善您的时间并使用相同的语法方面,它可能会更有效一些。每个数据集需要 10 秒,这意味着您需要大约 1.5 小时来处理所有数据。我假设加载数据可能需要比实际处理更长的时间 -
我忘了提到 - 我已经在使用
data.table包。然后我会调用错误的语法吗?是的,加载数据也需要很长时间——这就是为什么我希望这部分尽可能短。因为我认为使用fread作为read.csv的替代品并没有太多的节省潜力跨度> -
你在说什么?
freadso 比read.csv快得多。 -
如果您使用
data.table,那么我肯定会坚持使用fread和子集。不确定您是否会获得很多效率。只需加载它,让她撕裂几个小时。 -
对不起,我糟糕的英语可能有点误导......我的意思是:因为我已经在使用
fread,我想我不能再在那里赢得太多时间了。跨度>
标签: r performance error-correction