Преобразование переменных в коэффициент R, когда каждая переменная имеет свои собственные общие уровни в цикле

#r #loops #character

#r #циклы #символ

Вопрос:

У меня 116 символьных переменных, и каждая из них имеет свое собственное количество уникальных уровней. Некоторые имеют только два уровня (например A , amp; B ), в то время как другие имеют 327 уровней. Я могу преобразовать их в factor s один за другим, используя этот код:

 #train_cat <- training dataset
#cat1 <- character variable

dist <- length(unique(train_cat$cat1))
x <- seq(1, dist)
cat1 <- factor(train_cat$cat1, labels = x)
  

Тем не менее, я хотел бы иметь возможность вносить эти изменения в цикле, поскольку символьные переменные называются cat1 , cat2 , cat3 , …, cat116 .

Ответ №1:

Как насчет этого однострочного:

 x <- data.frame(x = 1:10, 
                cat1 = sample(letters[1:3], size = 10, replace = T), 
                cat2 = sample(letters[1:3], size = 10, replace = T))

x[,grep("cat", colnames(x))] <-  data.frame(lapply(x[,grep("cat", colnames(x))], factor))
  

Ответ №2:

Вы можете использовать a for loop .

Я предполагаю, что вам нужно dist просто пометить факторы числами, а затем больше нет. Также я предположу в своем примере кода, что все переменные переключаются на факторы. Если это не так, вы должны применить функцию только к подгруппе.

Цикл For будет выглядеть следующим образом:

 for (var in names(train_cat)){
   fact <- factor(train_cat[var], labels=seq(1,length(unique(train_cat[var])))
   assign(var, fact)  
}
  

Другим вариантом было бы использовать apply , в то время for loop factor как в each variable таким образом было создано собственное значение, вы получите новое data.frame значение со всеми переменными.

С apply этим будет работать так:

 fact <- apply(train_cat, 2,function(x){factor(x,labels = seq(1,length(unique(x))))})
cat_vars <- data.frame(fact)