2016-07-19 4 views
4

私は次のようにdfという名前のデータフレーム持っている:私は、マトリックスを構築Matを言うと、私は行として遺伝子および列などIDsを持つことになりますcsvファイルにそれを書きたい特定の列の値に基づいてデータフレームから行列を構築するにはどうすればよいですか?

Genes   ID   Type 
CFH   MB-0002  Gain 
CFHR3  MB-0002  Gain 
DEFB131  MB-0003  Gain 
UNC93B5  MB-0003  Loss 
CCDC125  MB-0004  Loss 
CCNB1  MB-0002  Gain 
CFH   MB-0004  Loss 
CCNB1  MB-0003  Gain 

を。対応するタイプがGain

  • -1であれば対応するタイプは、他のすべての場所でLoss
  • 0ある場合

    • 1:私が載せていきたいと思います。私の行列の

    そして例のようになります。

       MB-0002 MB-0003 MB-0004 
        CFH    1  0  -1 
        CFHR3   1  0  0 
        DEFB131   0  1  0 
        UNC93B5   0  -1  0 
        CCDC125   0  0  -1 
        CCNB1   1  1  0 
    
  • +0

    編集ありがとうございます! @ m0h3n –

    答えて

    7

    試してみてください。

    xtabs(c(1L, -1L)[Type] ~ ., data=df) 
    #   ID 
    #Genes  MB-0002 MB-0003 MB-0004 
    # CCDC125  0  0  -1 
    # CCNB1   1  1  0 
    # CFH   1  0  -1 
    # CFHR3   1  0  0 
    # DEFB131  0  1  0 
    # UNC93B5  0  -1  0 
    

    xtab()それはレベルの組み合わせごとに頻度カウントを含む変数を取ることを除いてtable()に似ています。結果はas.data.frame()でデータフレームに戻すことができます。

    数式の左側には、「カウント」(この場合は、不測の事態テーブルを入力する値)が表示されます。既知のトリックを使用して、インデックスを使用して因子を数値ベクトルに変換します(?factor参照)。右側の.は、「データフレーム内の残りの変数」のショートカットであり、この場合はGenes + IDに相当します。

    +4

    実際、必要な説明はLHS式です。私は通常、Rコードに必要な時間よりも長い間それを見つめていました。それはかわいいですが、おそらく新しいRユーザーにとってはあいまいです。 –

    +0

    @ ernest-a ありがとうございました。それは働いている。 しかし、私は次のコードを試しました: for(i in 1:nrow(df)){ if(df $ Type [i] == 'Gain'){ Mat [df $ Genes [i]、 (df $ Type [i] == 'Loss'){ Mat [df $ Genes [i]、df $ ID [i]] < - 'df $ ID [i]] < - ' 1 ' -1 ' } } しかし、それは次のエラーを表示しています: '[< - '( '* tmp *'、df $ Genes [i]、df $ ID [i]、value = "-1"): 添字が範囲外です。 誰が原因を教えてもらえますか? –

    +0

    @rawrいいえ、私は答えを使用しました。なぜ私のコードがうまくいかないのか不思議だった。 –

    関連する問題