对分组DT进行梳理返回错误";n<;m"; [英] combn on grouped DT returns error "n < m"
本文介绍了对分组DT进行梳理返回错误";n<;m";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含31557个观测值的数据集,变量为Order.Number和Material。我正在尝试在R:
中运行此命令第一个:
DT <- data.table(Order.number=X$Order.number, Materials=X$Materials)
setorder(DT, Order.number, Materials)
然后:
library(data.table)
ans <- DT[, as.data.table(do.call(rbind, combn(Materials, 2, simplify=FALSE))),
by=Order.number][,
.N, by=.(V1, V2)]
但我在combn(Materials, 2, simplify = FALSE) : n < m
如果我只使用随机生成的表,它可以工作。那么会不会与我拥有的数据集有关?
编辑:我尝试使用meaning of combn error,但收到"Error in do.call(rbind,function(X)if(length(X)>1){: 第二个参数必须是列表"ans <- DT[, as.data.table(do.call(rbind, function(x)
if(length(x)>1) {
combn(Materials, 2, simplify=FALSE)
}
else x)),
by=Order.number][,
.N, by=.(V1, V2)]
推荐答案
显然,您的DT中有一些分组变量Order.number
的值指定了长度为1或更小的组,因此combn(Materials, 2...)
抱怨n<;m。
您可以使用DT[, .N, by=Order.number] [N==1]
轻松诊断哪个组的长度为1。
然后将它们从摘要中排除,或者为comn编写包装器,在输入长度为n<;m时不执行任何操作。
(可以说combn
应该有一个增强的非默认选项,以便在应用于长度为n<;2的组时选择性地抑制错误,就像在分组的df/dt上运行时可能会发生的那样)
这篇关于对分组DT进行梳理返回错误";n<;m";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文