добавить +1 к столбцу с условием в R - PullRequest
0 голосов
/ 03 мая 2018

У меня есть фрейм данных barometre2013 со столбцом q0qc, который содержит эти числа:

[1] 15  1  9 15 9  3  6  3  3  6  6 10 15  6 15 10

Я хочу добавить +1 к числам, которые> = 10, поэтому результат должен быть таким:

[1] 16  1  9 16 9  3  6  3  3  6  6 11 16  6 16 11  

Я пробовал этот код:

if (barometre2013$q0qc > 9) {
  barometre2013$q0qc <- barometre2013$q0qc + 1
}

Но это добавляет +1 ко всем числам без соблюдения условия:

[1] 16  2  10 16 10  4  7  4  4  7  7 11 16  7 16 11

Как я могу делать то, что хочу?

Спасибо большое.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Когда вы выполнили:

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
0 голосов
/ 03 мая 2018
    data <- c(15,1,9,15,9,3,6,3,3,6,6,10,15,6,15,10)

    data2 <- 

    as.numeric( 
      for(i in data){
      if(i >= 10){ i = i +1 }
      print(i)
      }
    )

class(data)
class(data2)
...