1

次元nのベクトルがあり、それが0と1で構成されているとします。次に、このベクトルをm個の等しいビンに分割します。ビンに少なくとも1つの「1」が含まれている場合、そのビンはアク​​ティブと呼ばれます。アクティブなビンの場所とそこに含まれる「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

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 に答える