R矢量化:如何返回满足条件的矩阵中每行第一个元素的索引,并将所有元素求和,直到该索引?

时间:2016-01-29 05:14:35

标签: r mapply

我正在寻找一个矢量化解决方案。假设我生成了100个10抽样的样本。接下来,我想找到累积和矩阵的第一个元素的第一个索引,这意味着某些条件,比如> = 10。然后,我想将每一行的所有元素相加,直到满足该条件的第一个元素的索引。 MWE:

set <- c(1, 5, 7, 13, 15, 17)
samp <- samp <- matrix(sample(set, size = 100*10, replace = TRUE), nrow=simCount) # generate 100 samples of 10 draws
b <- matrix(apply(samp, 1, cumsum), 
  nrow = 100, byrow=TRUE) >= 10 # compare each element with 10, return boolean

我不确定如何将applywhich(x)=="TRUE"一起使用。我尝试了一些变化,但我不确定它是如何正确编码的。

在我得到之后,我将能够使用apply(b, 1, min)返回每行> = 10的第一个元素(最小索引)。

2 个答案:

答案 0 :(得分:2)

请为“随机”示例设置种子:

$servername = 'localhost';
$username = 'root';
$pass = 'root';
$database = 'tutor_database';

try {
  $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $pass);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // OBTAIN ROWID FROM $_GET
  if(isset($_GET['rowid'])) {
        $id = $_GET['rowid'];
  }

  // DELETE SPECIFIED ROW
  $sql = "DELETE FROM users WHERE id = ".$id;

  $conn->exec($sql);
  echo "Record deleted!";

} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}
$conn = null;

说明:

set.seed(111) samp <- matrix(sample(1:5, s=1000, r=T), nrow=100) (answer1 <- samp[which(apply(samp,1,function(x)sum(x)>30)),1]) # [1] 4 3 3 3 1 1 3 5 2 4 2 5 4 2 4 1 3 2 4 4 5 4 2 4 5 5 4 5 3 3 1 1 2 1 4 3 4 5 #[39] 1 5 1 4 4 3 3 2 5 5
好吧,如果添加10个正整数,apply(samp,1, function(x) sum(x) > 30)将始终为真。 适用于此行的每一行的“samp”。

>=10返回x的所有TRUE值的索引。 (感兴趣的行)

which(x)(由其返回的行)samp[,)st列1 ...基本索引

从外部逐步展开,以便更好地理解。

]

答案 1 :(得分:2)

我们可以使用rowCumsums

中的library(matrixStats)
library(matrixStats)
apply(rowCumsums(samp)>=10, 1, which.max)