2013-08-05 41 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 

的DAT第一线看起来是这样的:

 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

您可以将矢量化功能的数据帧像这样:

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 “)))'并得到数字输出。 –