我有一个data.frame
看起来像这样的稀疏二进制文件
set.seed(123)
dat <- as.data.frame(matrix(rep(round(runif(40,0,0.9),0),5),ncol = 20))
# > dat
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
# 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
# 2 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
# 3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
# 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 5 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
# 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 7 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
# 8 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
# 9 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
# 10 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
我需要找到在我调用rowSums
这些列时最小化获得的零数量的 3 列。
例子:
# > rowSums(dat[,1:3])
# [1] 2 2 2 3 2 2 0 2 0 1
#
# > rowSums(dat[,2:4])
# [1] 3 2 3 3 1 2 1 1 0 1
在这里,当我调用rowSums
前 3 列时,我得到 2 个零,而当我调用rowSums
列时,2:4
我只得到一个0
,因此首选第二种解决方案。
当然,我申请时不需要列彼此相邻rowSums
,所以我需要探索所有可能的组合(例如:我rowSums
也想考虑这种情况 ov V1+V5+V17
,...),如果有多个“最佳”解决方案,我只保留其中一个就可以了。
请注意,我的实际data.frame
是 220.000 行 x 200 列,因此我需要一种有效的方法来消耗时间/内存。