如何更有效地检查错误的值

时间:2015-12-15 19:07:44

标签: r performance error-correction

我正在处理大约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秒),我想加快这个过程。您有任何想法如何提高效率吗?或者这是最简单的方法,我必须处理它?<​​/ p>

提前非常感谢你!

编辑:我想知道例如:迭代行而不是列会更快吗?

1 个答案:

答案 0 :(得分:5)

如果您正在寻找纯粹的表现,我建议您查看data.table套餐,其中增强了data.frame中的data.table<-可以通过引用进行替换(无复印)。当你在R中调用赋值操作(data.table)时,我相信会产生一个数据副本,这会导致大数据集的速度减慢。

解决您问题的library(data.table) # Cast as a data.table dataset <- as.data.table(dataset) # Do the replacement by reference with the := operation in data.table # See ?`:=` dataset[!variable %in% c(1,2,3), variable := NA] dataset[variable >= 0 & variable <= 150, variable := NA] 解决方案:

data.frame

这比使用[<-

替换常规def on_key_press_event(self, widget, event): keyname = Gdk.keyval_name(event.keyval) print("Key %s (%d) pulsada" % (keyname, event.keyval)) if keyname == "q": print (event.state) if event.state == "CONTROL_MASK": print ("controlcu") if keyname == "Escape": self.entrada.set_text("") if keyname == "Return": self.button1.clicked() self.entrada.set_text("") 中的值更快 更快