我有一个矩阵,我需要找到符合以下条件的索引:
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;)。
答案 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