У меня есть датафрейм с 82 переменными. Многие из переменных содержат буквы алфавита c, которые я хочу изменить на набор чисел. Я могу сделать это столбец за столбцом, номер за номером, используя следующий код:
library(tibble)
mydf <- tribble(~Var1, ~Var2.a, ~Var3.a, ~Var4.a,
"A", "b", "b", "d",
"B", "w", NA, "w",
"C", "g", "k", "b",
"D", "k", NA, "j")
newdf <- mydf %>%
mutate(Var2.a = ifelse(Var2.a %in% c("m", "p", "w", "h", "n"), 1, Var2.a),
Var2.a = ifelse(Var2.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var2.a),
Var3.a = ifelse(Var3.a %in% c("m", "p", "w", "h", "n"), 1, Var3.a),
Var3.a = ifelse(Var3.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var3.a),
Var4.a = ifelse(Var4.a %in% c("m", "p", "w", "h", "n"), 1, Var4.a),
Var4.a = ifelse(Var4.a %in% c("k", "b", "g", "j", "f", "d"), 2, Var4.a))
Но для 70+ столбцов, которые мне нужно изменить, это займет много времени!
Все интересующие переменные имеют совпадающую буквенную комбинацию в имени переменной (".a" в данных примера), поэтому я должен иметь возможность использовать оператор ifelse
для этих столбцов, используя contains()
, Однако я не могу понять, как это сделать!
Я посмотрел на этот ответ , который, как мне кажется, приближает меня, но я не могу понять, как встроить оператор if в него:
newdf <- mydf %>%
mutate_at(vars[2:4] = ifelse(vars %in% c("m", "p", "w", "h", "n"), 1, vars)
Но я получаю ошибку Error in vars[2:4] : object of type 'closure' is not subsettable
. Я думаю, что здесь неправильные скобки, и, вероятно, также использование vars
!