Когда вы выполнили:
if (barometre2013$q0qc > 9) {
barometre2013$q0qc <- barometre2013$q0qc + 1
}
... вы должны были видеть предупреждение о "только первом оцениваемом значении". Это первое значение в barometre2013$q0qc
было 15, и, поскольку оно было ИСТИНА, то это назначение было выполнено для всего вектора. ifelse
или булева логика - это подходы, предложенные в комментариях для условной оценки и / или назначения. Первый:
barometre2013$q0qc <- barometre2013$q0qc + (barometre2013$q0qc >= 10)
... добавил вектор из 1 и 0 в начальный вектор; 1, если логическое выражение выполнено, и 0, если нет. Если вы хотите добавить что-то, отличное от единицы (которое является числовым значением TRUE), вы могли бы умножить это второе слагаемое на желаемое увеличение или уменьшение.
Другой подход состоял в том, чтобы использовать ifelse
, который делает условный тест своего первого аргумента при возврате либо второго, либо третьего аргумента для каждого элемента в отдельности:
barometre2013$q0qc <- barometre2013$q0qc + ifelse(barometre2013$q0qc >= 10, 1, 0)
Третий подход, предложенный dash2, заключается в изменении только тех значений, которые удовлетворяют условию. Обратите внимание, что этот метод требует наличия «тестового вектора» по обе стороны от назначения (именно поэтому dash2 исправлял предыдущий комментарий:
barometre2013$q0qc[barometre2013$q0qc>=10] <-
barometre2013$q0qc[barometre2013$q0qc>=10]+ 1