Вот базовое решение R
dfout <- within(df, New <- rev((Sign=="-")*(Len-cbind(Col2,Col3))) + (Sign=="+")*cbind(Col2,Col3))
, которое дает
> dfout
ColG Col2 Col3 Len Sign New.Col2 New.Col3
1 G1 1 30 300 + 1 30
2 G2 20 80 200 + 20 80
3 G3 455 720 1000 - 280 545
4 G4 3 40 100 - 60 97
5 G4 2 90 130 + 2 90
Данные
df <- structure(list(ColG = c("G1", "G2", "G3", "G4", "G4"), Col2 = c(1L,
20L, 455L, 3L, 2L), Col3 = c(30L, 80L, 720L, 40L, 90L), Len = c(300L,
200L, 1000L, 100L, 130L), Sign = c("+", "+", "-", "-", "+")), class = "data.frame", row.names = c(NA,
-5L))