создание новых переменных с помощью операторов ifelse и forloops в r

#r #loops #for-loop

#r #циклы #for-цикл

Вопрос:

Мне нужно создать фиктивную переменную для каждого отдельного уникального категориального значения переменной в моем фрейме данных.

Мне интересно, могу ли я превратиться unique(data$variable) в вектор, а затем создать forloop, который присваивает новую переменную для каждого значения. Что-то вроде

 for(val in vector){

data$print(val)<- ifelse(data$variable == val, 1, 0)}
 

Когда я пытаюсь это сделать, я получаю эту ошибку:

недопустимая функция при сложном назначении

Изменение кода на `for(значение в векторе){

 data$print[val]<- ifelse(data$variable == val, 1, 0)}`
 

выдает ошибку

Ошибка в $<-.data.frame ( *tmp* , print, value = c(1, 1, 1, 1, 1, 1, : замена имеет 480437 строк, данные имеют 480436

data$variable также является .factor уже

Заранее спасибо за помощь.

Комментарии:

1. Это помогло бы увидеть (часть) вашего набора данных. Кроме того, вы пытаетесь выполнить цикл через data $print? Если это так, это должно быть data$print[val]

2. я думаю, что простое преобразование этой переменной в factor должно сработать, т.е. data$variable <- as.factor(data$variable)

Ответ №1:

Правильный код был

 `for(value in vector) { 
  nam <- paste(value)
  assign(nam, ifelse(data$variable == value, "1", "0"))
 data<-cbind(data, get(value))
}`
 

где assign создает объекты для результата каждого оператора ifelse, а cbind присоединяет их к фрейму данных