Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R获取行和满足条件的所有子集_R_Data.table_Subset_Rowsum - Fatal编程技术网

R获取行和满足条件的所有子集

R获取行和满足条件的所有子集,r,data.table,subset,rowsum,R,Data.table,Subset,Rowsum,我在R中有一个data.table,例如: x这是一个针对当前数据集的暴力解决方案 p <- crossprod( x$count, sapply( seq(2^nrow(x)), function(n) head(as.integer(intToBits(n)), nrow(x)) ) ) res <- lapply( which(p >= 90 & p <= 110, arr.ind = TRUE)[, "col&q

我在R中有一个data.table,例如:


x这是一个针对当前数据集的暴力解决方案

p <- crossprod(
  x$count,
  sapply(
    seq(2^nrow(x)),
    function(n) head(as.integer(intToBits(n)), nrow(x))
  )
)

res <- lapply(
  which(p >= 90 & p <= 110, arr.ind = TRUE)[, "col"],
  function(i) x$id[which(head(intToBits(i), nrow(x)) > 0, arr.ind = TRUE)]
)

但是,对于ID更多的大型数据集,它无法扩展。

实际问题的规模是多少?蛮力方法可能在这里起作用,但不太可能在大数据上起作用。在您上面提出的问题中,有1023种可能的组合,但如果有20个ID值,则有100多万个。真正的问题是大约1500个ID。您可能问了一个数学问题,而不是面向数据的问题。我的建议是查看CRAN上的“rfast”图书馆。也许这个函数是:“行矩阵/向量计数值的频率”。可能会有一个优化的data.table解决方案,并且有足够的手工制作,但是像这样的问题通常与一些众所周知的复杂数学运算有关,这些运算通常由特定的库处理。
p <- crossprod(
  x$count,
  sapply(
    seq(2^nrow(x)),
    function(n) head(as.integer(intToBits(n)), nrow(x))
  )
)

res <- lapply(
  which(p >= 90 & p <= 110, arr.ind = TRUE)[, "col"],
  function(i) x$id[which(head(intToBits(i), nrow(x)) > 0, arr.ind = TRUE)]
)
> head(res)
[[1]]
[1] 2

[[2]]
[1] 3 4 6

[[3]]
[1] 1 3 4 6

[[4]]
[1] 3 4 5 6

[[5]]
[1] 1 3 4 5 6

[[6]]
[1] 1 4 7