Пройдите через фрейм R и увеличьте зарплату при определенных условиях. - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть образец моего фрейма данных (df):

   age  salary 
1  25   20000
2  35   22000
3  31   23500
4  24   19200
5  27   27900
6  32   31010

Я хочу увеличить зарплату на 11% для людей старше 30 лет, и их зарплата не является максимальной зарплатой в таблице. Я написал этот цикл:

for(row in df){
  if (row$age > 30 & row$salary != max(df$salary)){
    row$salary = row$salary * 0.11
  }
}

но я получаю меньше заработной платы, чем увеличение.

Был бы очень признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вот один из способов без явного ifelse. Должен быть один из самых быстрых способов сделать это -

df$new_salary <- with(df, salary + 0.11*salary*(age > 30)*(salary != max(salary))
0 голосов
/ 06 ноября 2018

Причина, по которой у вас возникают проблемы, заключается в том, что на каждой итерации цикла for (в частности, при прохождении каждой совпадающей строки) вы применяете преобразование ко всему столбцу. Попробуйте вместо этого:

k <- max(df$age)
df[df$age>30 & df$age<k, 'salary'] <- df[df$age>30 & df$age<k, 'salary'] * 1.11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...