如何解决R 获取 rowsum 满足条件的所有子集
我在 R 中有一个 data.table,例如:
x <- data.table( id = c(1:10),count=c(10,110,20,30,5,40,50,15,70))
我想分别选择 id 的所有子集,其中 count 的 rowsum 介于 90 和 110 之间。 一种组合是 105
id IN (1,3,4,6)
因为计数的总和是
x[id %in% c(1,6),sum(count)]
如何获得所有可能的组合?
解决方法
这是您当前数据集的强力解决方案
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
但是,对于具有更多 id 的大型数据集,它不会扩展。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。