在第一次出现x之后,所有剩余列的第一次出现的索引= 0。值

时间:2015-08-13 11:25:55

标签: r

我有一个矩阵,我需要找到符合以下条件的索引:
1.第一次值大于90(first90)
2.对应于first90之后第一次出现的零值的列的索引以及列中的其余条目都是零。

例如,在df.ex中,满足这些条件的行为2和4.正确的列索引对于行2为5,对于行4为4。 第1行和第3行的条目超过90,但是右边的一些列是非零的(第1行中有30列,第3行中有20列)。
第一部分是使用max col,第二部分是挣扎 任何想法都赞赏。

df.ex=matrix(c(
        0,57,92,0,30,0,
        190,99,30,100,0,0,
        0,91,0,0,20,49,
        15,121,0,0,0,0),
        nrow=4,ncol=6,byrow=T)

first.oc<-max.col(df.ex > 90, "first") 

更新:编辑矩阵。为了使它更清晰(看得太久)。我在第一次大于90(有那个)之后寻找列的索引,并且该行的其余条目为零。在稍微改变的示例中,对于第4行,第2列> 90,我正在寻找一种方法来查找第3列的索引(0后跟连续的0&#39;)。

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

df.ex.t <- as.data.frame(t(df.ex))
above.90 <- sapply(df.ex.t, function(x) which.max(x > 90))
trailing.0 <- sapply(df.ex.t, function(x) which.max(rev(x) > 0))
index <- as.logical(trailing.0 > above.90)
first.0 <- sapply(df.ex.t[,index], function(x) which.max(x == 0))

结果:

> first.0
V2 V4 
 5  4