我正在处理大约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>
提前非常感谢你!
编辑:我想知道例如:迭代行而不是列会更快吗?
答案 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("")
中的值更快 更快