对分组DT进行梳理返回错误"n<m" [英] combn on grouped DT returns error "n < m"

查看:41
本文介绍了对分组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进行梳理返回错误&quot;n&lt;m&quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆