【问题标题】:R: Automated ifelse calculation in matrix for every rowR:每行的矩阵中的自动ifelse计算
【发布时间】:2016-04-19 09:52:05
【问题描述】:

对于大矩阵 [n,1],我想找出每一行的值是否小于 0.1,以及下一个值(在下一行中)是否大于 0.1。

ifelse(matrix[1,1]<0.1 & matrix[2,1]>0.1, "1", "0")

ifelse(matrix[2,1]<0.1 & matrix[3,1]>0.1, "1", "0")

ifelse(matrix[3,1]<0.1 & matrix[4,1]>0.1, "1", "0")`

如何为每一行自动计算?

【问题讨论】:

  • 是的,我之前尝试过,但这是我的第一个循环,我不知道在这种情况下如何编写它。 for (i in matrix) { + ifelse(matrix[i,1]0.1, "1", "0")}

标签: r if-statement matrix


【解决方案1】:

这很容易矢量化:

set.seed(6L);
N <- 10L; m <- matrix(rnorm(N,0.1,0.01),ncol=1L);
m;
##             [,1]
##  [1,] 0.10269606
##  [2,] 0.09370015
##  [3,] 0.10868660
##  [4,] 0.11727196
##  [5,] 0.10024188
##  [6,] 0.10368025
##  [7,] 0.08690796
##  [8,] 0.10738622
##  [9,] 0.10044873
## [10,] 0.08951603
m[-length(m)]<0.1 & m[-1L]>0.1;
## [1] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

如果你想要实际的行索引:

which(m[-length(m)]<0.1 & m[-1L]>0.1);
## [1] 2 7

【讨论】:

    【解决方案2】:

    请注意,您要进行 n-1 比较,并使用 head() 函数提取除矩阵 [,1] 的最后一个元素之外的所有元素,并等效地使用 tail() 获取除第一个元素之外的所有元素元素。

    ifelse(head(matrix[,1],-1)&lt;0.1 &amp; tail(matrix[,1],-1)&gt;0.1, "1", "0")

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2018-09-03
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多