У меня есть набор данных из 80 переменных, и я хочу, чтобы подмножество из 50 из них и построил возврат. У меня есть список имен переменных, для которых я хочу построить возврат, и я пытаюсь использовать мутацию для команды dplyr для построения переменных в цикле. В частности мой код:Looping in R для создания преобразованных переменных
for (i in returnvars) {
alldta <- mutate(alldta,paste("r",i,sep="") = (i - lag(i,1))/lag(i,1))}
где returnvars мой список, и alldta мой набор данных. Когда я запускаю этот код за пределами цикла только с одним из значений «i», он работает нормально. Код, который выглядит следующим образом:
alldta <- mutate(alldta,rVar = (Var- lag(Var,1))/lag(Var,1))
Однако, когда я запускаю его в цикле (например, попытки сделать предыдущую строку кода в 50 раз за 50 различных переменных), я получаю следующее сообщение об ошибке:
Error: unexpected '=' in:
"for (i in returnvars) {
alldta <- mutate(alldta,paste("r",i,sep="") ="
Я не уверен, почему этот вопрос подходит. Я рассмотрел несколько способов, чтобы попытаться сделать это, и попытался использовать решения, которые также используют лапши, без успеха.
Любая помощь была бы высоко оценена! Если есть простой способ сделать это с помощью одной из команд приложения, это было бы здорово. Я не предоставлял набор данных, потому что мой вопрос не зависит от данных, я просто пытаюсь понять, как относительный R-новичок, как построить сразу несколько преобразованных переменных и добавить их в мой фрейм данных.
EDIT: В соответствии с комментариями Фрэнка, я обновил код на следующее:
for (i in returnvars) {
varname <- paste("r",i,sep="")
alldta <- mutate(alldta,varname = (i - lag(i,1))/lag(i,1))}
Это исправляет предыдущие ошибки, но я до сих пор не ссылающийся на переменную правильно, так что я получаю ошибку
Error in "Var" - lag("Var", 1) :
non-numeric argument to binary operator
Я предполагаю, что R видит мое имя переменной Var как строку, а не как переменную. Как правильно ссылаться на переменную в моем наборе данных alldta? Я попробовал получить (i) и alldta $ get (i), оба без успеха.
Я также по-прежнему открыт (и активно интересуется), больше способов R-стиля для выполнения всего этого процесса, в отличие от использования цикла.
Добро пожаловать в SO. Прежде всего, вы должны прочитать [здесь] (http://stackoverflow.com/help/how-to-ask) о том, как задать хороший вопрос; хороший вопрос имеет лучшие изменения, которые нужно решить, и вы получите помощь. С другой стороны, чтение [this] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) также хорошо. В нем объясняется, как создать воспроизводимый пример в R. Помогите пользователям помочь вам, предоставив часть ваших данных желаемый результат и то, что вы пробовали до сих пор. – SabDeM
Посмотрите на этот вопрос: http: // stackoverflow.com/questions/26003574/r-dplyr-mutate-use-dynamic-variable-names Вы получаете ошибку, потому что не можете создать свой собственный varname слева от '=' (ни внутри 'mutate', ни где-либо еще в R) , – Frank
Это полезный комментарий @Frank, спасибо! Я обновляю вышеуказанный код - он все еще не работает, но теперь проблема в том, что проблема связана скорее с ссылками переменных из циклов, а не с ошибкой, которую я получал раньше. –