Систематически перекодировать коэффициент в числовой в кадре данных

Мой вопрос кажется довольно повторяющимся в R (преобразовать факторы в числовые в фрейме данных ). Тем не менее решения не являются простыми.

Я хочу систематически перекодировать упорядоченные факторные переменные в упорядоченные числовые переменные.

Я хочу узнать ваше мнение о потенциальном (простом) решении.

Мои данные выглядят так

data = rbind(
  c('a1', 'strongly favor', 'bad', 'low'), 
  c('b1', 'neither nor', 'good', 'middle'), 
  c('c1', 'favor', 'good', 'low'), 
  c('d1', 'strongly oppose', 'good', 'high'), 
  c('e1', 'oppose', 'average', 'high') 
  )

data = as.data.frame(data)
data$V2 = factor(data$V2, levels = c('strongly favor', 'favor', 'neither nor', 'oppose', 'strongly oppose')) 
data$V3 = factor(data$V3, levels = c('good', 'average', 'bad')) 
data$V4 = factor(data$V4, levels = c('high', 'middle', 'low')) 

  V1              V2      V3     V4
1 a1  strongly favor     bad    low
2 b1     neither nor    good middle
3 c1           favor    good    low
4 d1 strongly oppose    good   high
5 e1          oppose average   high

Я думал о простом решении, подобном этому:

levels(data$V2) <- 1:length(data$V2)

Избегая делать все переменные одну за другой, я подумал о небольшом цикле

# First column is the identifier 
for(i in 2:ncol(data)){
  levels(data[,i]) <- 1:length(data[,i])
}

Могло ли это решение вызвать некоторые ошибки?
Как избежать зацикливания?


person giac    schedule 26.05.2015    source источник
comment
lapply(data[-1], function(x) as.numeric(x) ) заставит коэффициент быть числовым. Но я не понял, как вы изменили уровни на 1: длина   -  person akrun    schedule 26.05.2015
comment
Посмотрев на ваш код и немного подумав, не даст ли этот подход дополнительные числовые уровни, особенно для V3 и V4? Кроме того, на основе кода, если nrow равно 1000 или около того, это даст 1000 уровней, хотя на самом деле для каждого столбца существует только несколько уровней.   -  person akrun    schedule 26.05.2015