R中条件的计算

时间:2018-03-06 09:10:44

标签: r if-statement row

我有以下数据框:

   A   B   C   
1  SS  2   20   
2  TT  3   15   
3  SS  10  150
4  TT  12  121
5  UU  1   2
6  SS  4   48
7  TT  5   40
8  UU  3   12
9  UU  10  60

当A列为SS且B为2.99及以下时,介于3和5.99之间,6及以上时,将B列中的值乘以10,12和15,在C列中为行1分别给出20,150和48,分别为3和6。

当A列为TT且B为3.99及以下时,介于4和6.99之间,7及以上时,将B列中的值乘以5,8和11,得到第2行中C,15,121和40,分别为4和7。

当A列为UU且B为1.99及以下时,介于2和7.99之间,8及以上时,将B列中的值乘以2,4和6,在C列中为第5行给出2,12和60,分别为8和9。

我正在考虑将计算分解为2个步骤,首先创建一个满足条件集C的列C,然后是另一个用于计算的列E(下面未显示)。我尝试了以下方法:

df%>%mutate(D = ifelse(A ==' SS'& B< 3,10,ifelse(A ==' SS'& B) > 6,15,12)))并仅获得SS的输出。

A B C D. 1 SS 2 20 10 2 TT 3 15 12 3 SS 10 150 15 4 TT 12 121 12 5 UU 1 2 12 6 SS 4 48 12 7 TT 5 40 12 8 UU 3 12 12 9 UU 10 60 12

  

我试图弄清楚如何重复上述TT和UU的条件。

我非常感谢能在R中做到这一点的任何指导。

非常感谢您提供的任何建议。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

For (I in 1:nrow (your_df)){
        If (your_df[I,1] == "A" and your_df[I,2] > 2.99){
             your_df[I,3] = your_df[I,2] *20
}else if (new_cobdition){
......code
}else {
.......code
}
}

对任何错误感到抱歉。刚从我的手机上做到了。

答案 1 :(得分:0)

不确定这是否适合您的问题,但也许这就是您要找的?

multipFactor <- function(a,b){
  if(a == "SS"){
    if(b < 3){
      return(10)
    else if(3 <= b && b <=6){
      return(12)
    }else if(6 < b){
      return(15)
    }
  }else if(a == "TT"){
    if(b < 4){
      return(5)
    else if(4 <= b && b <=7){
      return(8)
    }else if(7 < b){
      return(11)
    }
  }else if(a == "UU"){
    if(b < 2){
      return(2)
    else if(2 <= b && b <=8){
      return(4)
    }else if(8 < b){
      return(6)
    }
  }else{
    error()
  }
}

 C <- apply(yourDataFrame[,c('A','B')],1,function(x) multipFactor (x[1],x[2])*x[2] )