假设我有一个维度为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