2016-03-18 14 views
0

データフレームがあり、そこからブール値データフレームを作成したいと思います。私は元のデータフレームのすべての列のすべての一意の値をブール値データフレームの列名として作成したいと考えています。例を使用してそれを表示するには:データフレームからブール型データフレームを作成するR

mydata = 
sex route 
m oral 
f oral 
m topical 
f unknown 

その後、私は

m f oral topical unknown 
    1 0 1  0  0 
    0 1 1  0  0 
    1 0 0  1  0 
    0 1 0  0  1 

を作成したい私はboleanデータフレームを作成するために、以下のコードを使用しています。 Rで動作しますが、光沢では動作しません。何が問題なの?

col_names=c() 

for(i in seq(1,ncol(mydata))){ 

col_names=c(col_names,unique(mydata[i])) 
} 


col_names= as.vector(unlist(col_names)) 

my_boolean= data.frame(matrix(0, nrow = nrow(mydata), ncol =  length(col_names))) 

colnames(my_boolean)=col_names 

for(i in seq(1,nrow(mydata))){ 
    for(j in seq(1,ncol(mydata))) 
    { 
    my_boolean[i,which(mydata[i,j]==colnames(my_boolean))]=1 
    }} 
+0

model.matrixを使用してみてください: 'model.matrix(〜セックス+ルート - 1、MYDATA)は'私が 'model.matrix(ただし、@NBATrendsと思い – Raad

+0

クリーナーです〜セックス+ルート - 1、私のデータ) 'は、カテゴリの1つがベースラインとして使用されているため、正しい結果を得られません。これを修正するには、 'cbind(model.matrix(〜sex-1、mydata)、model.matrix(〜route-1、mydata))'を実行することができます。 – Bayesric

+0

あなたはあなたの質問のその部分で助けを得るために光沢のあるものではないことを説明しなければならないでしょう。 – A5C1D2H2I1M1N2O1R2T1

答えて

3

は、あなたがこれを行うことができますいくつかの方法がありますが、私はいつもtable理解するのが最も簡単見つけます。ここでtableとアプローチです:

do.call(cbind, lapply(mydf, function(x) table(1:nrow(mydf), x))) 
## f m oral topical unknown 
## 1 0 1 1  0  0 
## 2 1 0 1  0  0 
## 3 0 1 0  1  0 
## 4 1 0 0  0  1