将列值乘以另一个值,具体取决于某列R中的值

MIH*_*MIH 5 r rows dplyr

在下面的数据集中,我想将列中Size的值乘以值Month1,Month2或者Month3取决于列中的数字Month.因此,如果在某一行中Month值为2,我想将列中Size的值乘以列中的值Month2,并将结果保存在新列中NewSize.非常感谢您的帮助!

Orig = c("A","B","A","A","B","A","A","B","A")
Dest = c("B","A","C","B","A","C","B","A","C")
Month = c(1,1,1,2,2,2,3,3,3)
Size = c(30,20,10,10,20,20,30,50,20)
Month1 = c(1,0.2,0,1,0.2,0,1,0.2,0)
Month2 = c(0.6,1,0,0.6,1,0,0.6,1,0)
Month3 = c(0,1,0.6,0,1,0.6,0,1,0.6)
df <- data.frame(Orig,Dest,Month,Size,Month1,Month2,Month3)
df

  Orig Dest Month Size Month1 Month2 Month3
1    A    B     1   30    1.0    0.6    0.0
2    B    A     1   20    0.2    1.0    1.0
3    A    C     1   10    0.0    0.0    0.6
4    A    B     2   10    1.0    0.6    0.0
5    B    A     2   20    0.2    1.0    1.0
6    A    C     2   20    0.0    0.0    0.6
7    A    B     3   30    1.0    0.6    0.0
8    B    A     3   50    0.2    1.0    1.0
9    A    C     3   20    0.0    0.0    0.6
Run Code Online (Sandbox Code Playgroud)

Jil*_*ina 3

这是一种替代方法ifelse

> transform(df, NewSize=ifelse(Month==1, Size*Month1, 
                  ifelse(Month==2, Size*Month2, Size*Month3)))
  Orig Dest Month Size Month1 Month2 Month3 NewSize
1    A    B     1   30    1.0    0.6    0.0      30
2    B    A     1   20    0.2    1.0    1.0       4
3    A    C     1   10    0.0    0.0    0.6       0
4    A    B     2   10    1.0    0.6    0.0       6
5    B    A     2   20    0.2    1.0    1.0      20
6    A    C     2   20    0.0    0.0    0.6       0
7    A    B     3   30    1.0    0.6    0.0       0
8    B    A     3   50    0.2    1.0    1.0      50
9    A    C     3   20    0.0    0.0    0.6      12
Run Code Online (Sandbox Code Playgroud)