假設我有一個維度爲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中編寫它嗎?
假設我有一個維度爲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中編寫它嗎?
我會做這樣的:
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]
或'no < - rowSums(matrix(a,ncol = 3,byrow = TRUE));其中(無> 0); no [no> 0]' – 2012-04-24 16:50:37
或'no < - colSums(matrix(a,3))'。較短的代碼,FTW! ;-) – 2012-04-24 16:59:18
另一種方法用的人的數量來獲得向量:
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一樣。
也許吧。 (只是順便說一句,這是作業嗎?) – huon 2012-04-24 16:33:42