#r
Вопрос:
Я работаю над расчетами ИМТ. У меня есть следующий код
mutate(name, bmi = mass / ((height / 100) ^ 2)) %>%
mutate(BMI_Value = ifelse(bmi > median(bmi, na.rm = T), "Above Average BMI", "Below Average BMI")) %>%
select(name, contains("bmi"))
Если я использую mutate подобным образом, то позже я не смогу использовать значение BMI_Value. Поэтому мне было интересно, как я мог бы создать новую переменную, чтобы ее можно было использовать снова
Следите за обновлениями
Хорошо, смотрите этот код ниже, это работает нормально, но я, кажется, не могу снова использовать bmi
starwars.df <- starwars
head(starwars)
starwars %>%
mutate(name, bmi = mass / ((height / 100) ^ 2))
Затем, когда я пытаюсь создать индекс массы тела, как показано ниже, я получаю ошибку, см. Ниже после кода
starwars.df <- starwars
head(starwars)
starwars$bmi <- mutate(bmi = mass / ((height / 100) ^ 2))
Ошибка при мутации(масса, имт = масса/((рост/100)^2)) :
объект «масса» не найден
Комментарии:
1. Пожалуйста, приведите минимальный воспроизводимый пример. Я прочитал это и не знаю, является ли
name
это фреймом данных или именем переменной. Кроме того, это должно работать как есть, так что есть кое-что, что вы упустили, что ломает вещи. Еслиname
это фрейм данных, и тогда это может вызвать проблему.2. Я не понимаю, в чем проблема. Вы создаете столбец с помощью mutate, затем отбрасываете его с помощью select, но затем снова хотите его вернуть…? Если вам нужна колонка, не избавляйтесь от нее
3. Я думаю, что главная проблема заключается в том, что вы печатаете результат, а не обновляете фрейм
name
данных. Если у меня естьx <- 5
, и я запускаю строкуx 1
, результат6
будет напечатан, ноx
все равно5
. Если я хочу изменитьx
, я используюx <- x 1
для назначения изменения. Та же идея применима и кmutate
тому , что если вы хотитеname
обновить фрейм данных, вам необходимо назначить изменение,name <- mutate(name ...
Ответ №1:
Даже если мне не совсем ясно, что вы делаете, возможно, проблема в том, что вы не сохраняете свои операции в объекте (ваш фрейм данных). Попробуйте добавить -> new_df
в конце последней строки, чтобы сохранить все в новом фрейме данных. Затем он должен содержать все вновь созданные переменные.
Кроме того, удалите name
на шаге выбора: select(contains("bmi"))
Обновление после обновленного вопроса:
оператор канала %>%
не сохраняет ваш кадр данных, поэтому вам просто нужно снова назначить свои операции вашему кадру данных (или новому…).:
starwars <- starwars %>%
mutate(bmi = mass / ((height / 100) ^ 2))
или альтернативно:
starwars %>%
mutate(bmi = mass / ((height / 100) ^ 2)) -> starwars
Комментарии:
1. Спасибо за вашу помощь
2. не за что!