1

假设我有一个维度为 n 的向量,它由 0 和 1 组成。然后我将这个向量分成 m 个相等的 bin。如果一个 bin 至少包含一个“1”,则该 bin 被称为活动。我想编写一个命令来返回活动箱的位置以及它们包含多少个“1”。

例如,我有这个向量:n=15, m=5

[1 0 0 | 0 1 1 | 0 0 0 | 0 1 0| 1 1 1]

我想要矩阵[1 2 4 5](活动箱)和[1 2 1 3](它们包含多少个 1)。

我可以在不使用 for 循环的情况下用 R 编写这个吗?

4

2 回答 2

4

我会这样做:

a <- c(1,0,0,0,1,1,0,0,0,0,1,0,1,1,1)
m <- 5
idx <- rep(1:m, each=length(a)/m)

# how many ones?
no <- sapply(1:5, function(x) sum(a[idx==x]))

# which bins contain ones?
bins <- 1:m
bins[no>0]
于 2012-04-24T16:43:49.440 回答
1

另一种获取向量的方法:

x <- c(1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1)

n <- length(x)
m <- 5
size <-  n/m

x.list <- split(x, cut(seq_along(x)/size, 0:m))

vapply(x.list, sum, 0)

从那里开始,像 jigr 那样做。

于 2012-04-24T16:51:35.190 回答