2016-04-12 18 views
0

私は約7k行でこのように見えるRのデータフレームを持っています。データについてデータフレームの変換

Customer ID Test_Control DF Purchase 
1112223333  test  ab  False 
2222223333  Control ab  False 
3332223333  Control ab  True 
4442223333  test  ab  False 

:CUSTOMER_ID年代の

  • すべてがユニークです。
  • 「購入」の列は、DFの列がなかれ、私がする必要がある「AB」

を持って

  • 「Test_Control」欄は、「テスト」または「コントロール」のいずれかである
  • 真か偽のどちらかでありますそれはこのように見えるように変換:

    Test  Control 
    0  1 
    0  1 
    1  0 
    0  1 
    

    変換について:

    • Test_control列が場合は、「試験」および「対照」欄
    • 両方に0であるべきで、それが「FALSE」購入列場合は、試験またはコントロール
    • ある場合にオフ基づいて2列に分離されなければなりませんPurchase列が 'True'であれば、「1」は「test」列または「control」列のいずれかに移動する必要があります。たとえば、「test_control」列がtestの場合、1は「test」列に入ります。

    本質的に、私はこれをt.test()のために準備しています。

    +0

    私は少し混乱しています:あなたが提供するデータは、あなた自身のルールに基づいて必要な例にマップされません。それはどうしたの? –

    答えて

    1

    を割り当てるかどうかを決定するためにTest_Controlの値をチェックし、それが0の値を割り当てる場合に、Purchaseが偽であるかどうかをチェックライブラリでは、元のデータへのリンクを維持することができます:

    library(reshape2) 
    df <- data.frame(Customer.ID = c(1112223333, 2222223333, 3332223333, 4442223333), 
           Test_Control = c("test", "Control", "Control", "test"), 
           DF = rep("ab", 4), 
           Purchase = c(FALSE, FALSE, TRUE, FALSE)) 
    #Add dummy column with the desire result  
    df$result<-1 
    #cast the data frame 
    dcast(df, Customer.ID + Purchase + DF ~ Test_Control, fill=0) 
    
    0

    これにはifelseを使用できます。各変数のために、それはそうでなければ、それは1又はreshape2を使用0

    df <- data.frame(Customer.ID = c(1112223333, 2222223333, 3332223333, 4442223333), 
           Test_Control = c("test", "Control", "Control", "test"), 
           DF = rep("ab", 4), 
           Purchase = c(FALSE, FALSE, TRUE, FALSE)) 
    
    df$Test <- ifelse(!df$Purchase, 0, ifelse(df$Test_Control=="test", 1, 0)) 
    df$Control <- ifelse(!df$Purchase, 0, ifelse(df$Test_Control=="Control", 1, 0)) 
    
    関連する問題