我编写了一个脚本,可以帮助验证结构并对非常大的data.tables进行基本的描述性统计。我需要有一个快速的方法来判断一个给定的变量是否超过 - 比如 - 50个独特的水平。
我可以通过
来做function(DT, colnr)
{
b<-DT[, list(var=colnames(DT)[[colnr]],.N), by = list(level=DT[[colnr]])]
if(nrow(b)<50)
#less than 50 levels, probably we need a dictionary.
setorder(b, level)
b
else
#more than 50 levels. Just return the number of unique values.
data.table(level=NA, var=colnames(DT)[[colnr]], N=-nrow(b))
}
但是DT[, list(var=colnames(DT)[[colnr]],.N), by = list(level=DT[[colnr]])]
对于具有尽可能多的唯一值的变量需要很长时间(我在DT
中有超过400万个案例)
有没有办法改善表现?如果有超过50个,我不需要计算唯一案例的数量。返回&#34;超过50&#34;就够了