R编程查找列表中的第一个条目大于

时间:2018-11-18 21:19:59

标签: r loops for-loop matrix

假设我们有表x:

V1   V2   V3     
1    8    18      
95   36  -40     
-67 -68  -27     
192   2   9    
160  105  36

我想从V1中找到第一行,该行大于100。在我们的例子中,192是大于100的第一行。所以我想获得4作为输出,因为192是V1中的第四行V1。

我该如何实现?我尝试过:

for (i in 1:length(x$v1){
    if(x[1,i]>=100){
      print(i)
      break}    
}

但是没有用。 R 编译器说:

Error in if (x[1, i] >= 100) print(i) : argument is of length zero
>         break    
Error: no loop for break/next, jumping to top level
> }
Error: unexpected '}' in "}"

我该怎么办?

2 个答案:

答案 0 :(得分:1)

我们可以使用max.col

获得每一行中第一项的列索引
j1 = max.col(df1 > 100, 'first')
j2 = j1 * NA^!rowSums(df1 > 100)

然后使用行/列索引提取值

na.omit(df1[cbind(seq_len(nrow(df1)), j2)])[1]
#[1] 192

如果我们仅检查第一列,则可以使用which.max

which.max(df1$V1 > 100)

答案 1 :(得分:0)

使用以下方法更改循环

for (i in 1:length(df[,1])){
     if(df[i,1]>=100){
         print(i)
         break}    
}