2012-04-24 126 views
1

假設我有一個維度爲n的矢量,它由0和1組成。然後我把這個矢量分成m個相等的bin。如果一個箱包含至少一個「1」,則該箱被稱爲活動箱。我想寫一個命令返回活動垃圾箱的位置以及它們包含多少「1」。R中的矢量操作

例如,我有這樣的矢量爲: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中編寫它嗎?

+0

也許吧。 (只是順便說一句,這是作業嗎?) – huon 2012-04-24 16:33:42

回答

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));其中(無> 0); no [no> 0]' – 2012-04-24 16:50:37

+4

或'no < - colSums(matrix(a,3))'。較短的代碼,FTW! ;-) – 2012-04-24 16:59:18

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一樣。