【问题标题】:How to loop inside data frame with a condition?如何在有条件的数据框中循环?
【发布时间】:2013-10-23 01:49:55
【问题描述】:

我有一个包含两列(时间、结果)的 data.frame (df)。我正在尝试根据时间在数据框内循环并检查 Result 的值以执行某些条件。换句话说,我想从头开始遍历 df,直到 df$time 值变为 60。对于每次迭代,我需要检查 df$Result 是否大于 100。但是,我已经通过使用子集来完成此操作,我想知道如何以不同的方式做到这一点..例如嵌套的 For 循环。

我创建了一个 MWE 来说明问题;

 time<-seq(1,100,0.1)
 Result<-seq(1,991,1)
 df<-data.frame(time,Result)
 # I want to loop inside the df until the df$time=60
 # for each iteration I want to check the df$Result  if it's >100.

这是我在嵌套中的尝试:

 Df_time<-df$time
 Df_result<-df$Result
 x<-0

 for(i in Df_time){

     if(i > 60.0){

       for(i in Df_result){
          if(i >100){
            x<-x+1
           }
        }   


     }

  }

   cat("Total is ",x,"\n")

这似乎不对..我认为这与内部 for 循环有关,因为它会跨越整个范围...有什么建议吗?

【问题讨论】:

  • 一般来说,我会避免在嵌套循环中使用相同的运行索引i(可能会导致不良后果)

标签: r


【解决方案1】:
sum(df$time > 60 & df$Result > 100)

会成功的。

【讨论】:

    【解决方案2】:

    这应该给你行数的计数,我认为这就是你想要加起来的x

     dim(df[time < 60 & Result > 100,])[1]
    

    【讨论】:

    • 这不适用于data.frame ;) -- 如果是这样,那将是由于环境变量管理不善
    • @RicardoSaporta,你是对的。我已经快一年没用过data.frames了,所以我已经一点一点地忘记了。你所说的环境变量是正确的,因为时间和结果是首先创建的,我怀疑这就是用来创建过滤器的。您为什么不发布正确的方式作为答案?
    • 还要注意dim(·)[1]等同于nrow(·)所以你最好使用后者:D
    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多