【问题标题】:How to compute multiple looping and if conditions for a Data Frame?如何计算数据帧的多个循环和 if 条件?
【发布时间】:2022-01-08 02:25:19
【问题描述】:

我有一个像下面这样的数据,如果你在 excel 中看到公式,它会将行中的第二个元素与 if 语句中的第一个元素进行比较,然后循环继续进行下一次迭代。

我在这里粘贴了 6 行。像这样,我的数据框中有很多行。遇到这种情况怎么写脚本?

【问题讨论】:

    标签: r excel


    【解决方案1】:

    这段代码解决了我的问题

    for(i in 1:nrow(df)){
      if(df$Key[i]==df$Key[i+1] & df$Month_Year[i]==df$Month_Year[i+1]){
        df$Condition[i]="True"
      }else {
        df$Condition[i]="False"
      }
    }
    
    
    for(j in 1:nrow(df)){
      if(df$Condition[j]=="True"){
        if(df$Date[j]==df$Date[j+1]){
          df$Lead.Time[j]=0
        }else{
          df$Lead.Time[j]= df$Date[j+1]-df$Date[j]
        }
        
      }else {
        df$Lead.Time[j]=0
      }
    }
    

    【讨论】:

      【解决方案2】:

      我想你是在问是否可以遍历数据行并检查每个第二个元素是否等于每个第一个元素?

      如果是这样,我将以编程方式执行此操作的方式是在一个步骤中循环遍历行:

      data=data.frame(Date=c(1,1,2,4,4),Time=c(2,2,3,4,4))
      as_far_as=nrow(data)-1
      for(i in 1:as_far_as){
           print(data$Date[i])
           print(data$Date[i+1])
       }
      [1] 1
      [1] 1
      [1] 1
      [1] 2
      [1] 2
      [1] 4
      [1] 4
      [1] 4
      as_far_as=nrow(data)-1
      for(i in 1:as_far_as){
          print(data$Date[i])
          print(data$Date[i+1])
      }
      

      上面我正在循环遍历行并要求它打印每个第一个元素 (data$Date[i]),然后是每个第二个元素 (data$Date[i+1])

      如果我想在其中引入布尔逻辑,我会这样做:

      as_far_as=nrow(data)-1
      for(i in 1:as_far_as){
          if(data$Date[i]==data$Date[i+1] & data$time[i]==data$time[i+1]){
               print('dates are the same')
          }else{
               data$Date[i]=data$Date[i]-data$Date[i+1]
          }
      }
      

      我不知道你到底在问什么,因为我不擅长,但尝试使用上面的代码和 if 语句 if(x==y){...}else{...} 来得到你想要的。

      【讨论】:

      • 您好,在第一次迭代中,第 2 个元素与第 1 次迭代比较,第 3 个元素与第 2 个元素比较。继续。
      • 是的,这就是我的代码的工作方式:for(i in 1:as_far_as){print(i);print(i+1)} 给你1,2,2,3,3,4,4,5,5,6.....
      • 嗨 Cris,你能把这些数据复制到一个数据框中吗?你能检查一下你是否得到了我提到的输出吗?在提前期列中,您应该有 2 个值,基本上是 6 和 4。这将是一个很好的帮助。
      • 嗨@Thinker 我在我的回答中放了一个示例数据框:您必须使用data=data.frame(Data=c('30-01-09',...),Key=c('XYZ',...))为自己制作一个示例数据框
      • 非常感谢克里斯
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2021-11-23
      相关资源
      最近更新 更多