Вы можете сделать это:
data$M1 <- pmax(data$Mw - 6.5, 0)
Идея заключается в следующем: вы хотите создать вектор, содержащий data$Mw - 6.5
, если не указано data$Mw < 6.5
, и в этом случае вектор должен быть равен нулю. Это означает, что у вас будет ноль точно, когда data$Mw - 6.5 < 0
. Таким образом, для каждого i
ваш вектор будет содержать максимум data$Mw - 6.5
и 0
.
Это именно то, для чего предназначена функция pmax()
: она принимает несколько векторов в качестве входных данных и возвращает поэлементный максимум. Это легче всего увидеть на примере:
pmax(c(1, 4), c(3, 2))
[1] 3 4
Первое значение выхода соответствует max(1, 3)
, второе значение max(4, 2)
.
Это значительно быстрее, чем при использовании ifelse()
.