2013-08-05 2 views
0

Я пытаюсь перекодировать создавать новые переменные на основе уже существующих переменных. Следующий код - это то, что я придумал. Есть ли лучший способ сделать это? Например, мне нужно заранее создать отдельную матрицу или легко создать новые переменные в уже существующем наборе данных?Перекодирование нескольких переменных

rec<-c("col1", "col2", "col3", "col4") 

recmat<-as.data.frame(matrix(NA,800, length(rec))) 
recmat[, 1:length(rec)][0<=dat[,rec] & 1>=dat[,rec]]<-0 
recmat[, 1:length(rec)][2<=dat[,rec] & dat[,rec]<=4]<-1 

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

 col1 col2 col3  col4 
1  NA  NA  NA   NA 
2  NA  NA  NA   NA 
3  NA  NA  NA   1 
4  0  NA  NA   NA 
5  0  NA  NA   NA 
6  NA  NA  NA   NA 
7  0  0  0   NA 

ответ

0

Вы можете применить vectorised функцию к кадру данных следующим образом:

f=function(x) ifelse((x>=0 & x<=1),0,ifelse((x>=2 & x<=4),1,NA)) 
recmat<-f(dat) 

или, может быть

recmat<-f(dat[,rec]) 

Это поможет, если вы предоставите приведен пример того, как может выглядеть dat.

+0

Спасибо! Работает как шарм! –

+0

Запись as.data.frame (f (dat [, rec])) вокруг функции также преобразует переменные в числовые значения, так как функция, которую вы предоставляете по какой-либо причине, возвращает матрицу с символьными вводами. –

+0

Это очень странно. Я тестировал (до того, как вы редактировали сообщение) с помощью 'dat = matrix (runif (40) * 5, ncol = 4, dimnames = list (1: 10, c (" col1 "," col2 "," col3 "," col4 ")))' и получил числовой вывод. –