2012-04-24 13 views
1

次元nのベクトルを持ち、それが0と1で構成されているとします。次に、このベクトルをm個の等しいビンに分割します。ビンは、少なくとも1つの「1」を含む場合、アクティブと呼ばれます。私は、アクティブなビンの場所とそのビンに含まれる "1"の数を返すコマンドを書きたいと思います。ベクトル操作R

は、例えば、私は、このベクトルを有する:N = 15、M = 5

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

Iは、(それらが含む何1)マトリックス[1 2 4 5](アクティブビン)と[1 2 1 3]を持ちたいです。

forループを使用せずにRで記述できますか?

+0

おそらく。 (ちょうどbtw、宿題ですか?) – huon

答えて

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] 
+4

または 'no < - rowSums(matrix(a、ncol = 3、byrow = TRUE));それは(no> 0)。 no [no> 0] ' –

+4

または' no < - colSums(matrix(a、3)) 'です。短いコード、FTW! ;-) –

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が行うようにしてください。