2017-01-12 5 views
1

に細胞を変換すると、私のデータフレームのexmapleがあります:COLNAMES

> df 
n b c d 
A Eeee Aaaa  
B Aaaa Bbbb Jjjj 
C Jjjj Cccc  
D Aaaa Dddd 

私はユニークなCOLNAMESにセルの値を変換し、バイナリ値でデータフレームを埋めるためにしたいので、結果としてデータフレームは次のようになります。

> resulting_df 
n Aaaa Bbbb Cccc Eeee Jjjj 
A 1 0 0 1 0 
B 1 1 0 0 1 
C 0 0 1 0 1 
D 0 0 0 0 0 

ループなしでこれを達成する簡単な方法があるはずです。助けてください。

+0

あなたは 'reshape2'というタグを付けましたが、パッケージを試しましたか? –

+0

@RichScrivenはい、私は現時点でそれを模索していますが、どの機能を使用するかは分かりません。私は整頓のようなスムースが必要だと思う。 – Schatt95

答えて

4

reshape2それを行うことができます。
データ:

df=structure(list(n = structure(1:4, .Label = c("A", "B", "C", "D" 
), class = "factor"), b = structure(c(2L, 1L, 3L, 1L), .Label = c("Aaaa", 
"Eeee", "Jjjj"), class = "factor"), c = structure(1:4, .Label = c("Aaaa", 
"Bbbb", "Cccc", "Dddd"), class = "factor"), d = structure(c(NA, 
1L, NA, NA), .Label = "Jjjj", class = "factor")), .Names = c("n", 
"b", "c", "d"), class = "data.frame", row.names = c(NA, -4L)) 

library(reshape2) 
dcast(melt(df,id.vars = "n"),n ~value,fun.aggregate = length) 

います:

n Aaaa Bbbb Cccc Dddd Eeee Jjjj NA 
1 A 1 0 0 0 1 0 1 
2 B 1 1 0 0 0 1 0 
3 C 0 0 1 0 0 1 1 
4 D 1 0 0 1 0 0 1 

をあなたは可能性があり、最後の列の選択を解除。

考え方は、melt()のデータを長い形式にしてから、必要に応じてdcast()を使ってそれをリキャストします。
fun.aggregate=lengthが使用され、データフレームを埋めるために使用される値が発生回数に対応します。

+0

ありがとう!それは助け:) – Schatt95