2013-08-05 75 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 「)))'並得到數字輸出。 –