2016-10-10 7 views
2

私は、次の例のデータフレームがあります。このデータフレームでデータフレーム:新しい列名にcolumsからユニークな値

data.frame(ID=c(1:9),COLOR=c('red','green','blue','white','black','yellow','red','blue','red'), 
      SHAPE=c('square','circle','triangle','square','triangle','circle','circle','circle','square'), 
      VAR_X=c(5,8,3,9,7,4,2,9,12)) 


    ID COLOR SHAPE VAR_X 
1 1 red square  5 
2 2 green circle  8 
3 3 blue triangle  3 
4 4 white square  9 
5 5 black triangle  7 
6 6 yellow circle  4 
7 7 red circle  2 
8 8 blue circle  9 
9 9 red square 12 

を私は色と形の組み合わせから一意の各値のために新しい列を作成します。そこで、私の例では、「赤い四角形」、「緑色の円」、「青い三角形」、「白い四角形」、「黒い三角形」、「黄色の円」、「赤い円」、「青い円」 '新しい列の各観測値は、COLORとSHAPEの組み合わせに対応する必要があります。 「赤の広場」これは次のようになりについて:私は唯一のユニークな組み合わせをしたいので

ID COLOR SHAPE VAR_X red_square 
1 1 red square  5  true 
2 2 green circle  8  false 
3 3 blue triangle  3  false 
4 4 white square  9  false 
5 5 black triangle  7  false 
6 6 yellow circle  4  false 
7 7 red circle  2  false 
8 8 blue circle  9  false 
9 9 red square 12  true 

、「赤の広場」の新しい列が一度だけ作成する必要があります。データフレームに存在しない可能性のあるすべての組み合わせ(たとえば、白丸)については、列名を作成しないでください。

誰でも私が探している解決策がありますか?

答えて

3

私たちは、私はこれで、追加の問題を持っているtable

cbind(df1, as.data.frame.matrix(with(df1, table(ID, paste(COLOR, SHAPE, sep="_"))!=0))) 
# ID COLOR SHAPE VAR_X black_triangle blue_circle blue_triangle green_circle red_circle red_square white_square yellow_circle 
#1 1 red square  5   FALSE  FALSE   FALSE  FALSE  FALSE  TRUE  FALSE   FALSE 
#2 2 green circle  8   FALSE  FALSE   FALSE   TRUE  FALSE  FALSE  FALSE   FALSE 
#3 3 blue triangle  3   FALSE  FALSE   TRUE  FALSE  FALSE  FALSE  FALSE   FALSE 
#4 4 white square  9   FALSE  FALSE   FALSE  FALSE  FALSE  FALSE   TRUE   FALSE 
#5 5 black triangle  7   TRUE  FALSE   FALSE  FALSE  FALSE  FALSE  FALSE   FALSE 
#6 6 yellow circle  4   FALSE  FALSE   FALSE  FALSE  FALSE  FALSE  FALSE   TRUE 
#7 7 red circle  2   FALSE  FALSE   FALSE  FALSE  TRUE  FALSE  FALSE   FALSE 
#8 8 blue circle  9   FALSE  TRUE   FALSE  FALSE  FALSE  FALSE  FALSE   FALSE 
#9 9 red square 12   FALSE  FALSE   FALSE  FALSE  FALSE  TRUE  FALSE   FALSE 
+0

を使用することができます。 #1と#2が同じIDを持ち、#7と#8も同じものを持っていると仮定します:結果をグループ化してred_square = TRUE、green_circle = TRUE、または#1と#2の両方を得て同様にred_circle = #7と#8でblue_circle = TRUEですか?だから基本的には、私の質問は、IDで結果をグループ化することができる場合です –

+0

@Joep_Sその場合、あなたは 'テーブル'アプローチでグループを行うことができます。 – akrun

+0

group_byが構文のどこにあるべきか教えていただけますか?私はいくつかのことを試しましたが、私が得られるのはエラーや結果が意味をなさないものです。 –

関連する問題