在以下数据集中,我想将Size列中的值乘以Month1Month2Month3列中的值,具体取决于我们在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

最佳答案

这是一种使用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

10-01 13:05
查看更多