2016-04-12 15 views
0

Ich habe einen Datenrahmen in R, der so mit ungefähr 7k Zeilen aussieht.Einen Datenrahmen transformieren

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

Über den Daten:

  • Alle der Customer_ID ist einzigartig.
  • Die "Kauf" Spalten entweder wahr oder falsch
  • Die "Test_Control" Spalte wird entweder "Test" oder "Control"
  • Die DF-Spalte hat alway "ab"

Ich muss verwandelt es so aussehen:

Test  Control 
0  1 
0  1 
1  0 
0  1 

über die Transformation:

  • Die Test_control Spalte in zwei Spalten werden soll, basierend abgetrennt, wenn es Test- oder Kontroll
  • ist, wenn der Kauf Spalte „False“ es es sowohl ein 0 für den „Test“ und „Kontrolle“ Spalte
  • sein sollte Wenn Die Kaufspalte ist "True", dann sollte eine "1" entweder in die Spalte "Test" oder "Kontrolle" gehen. Wenn zum Beispiel die Spalte "test_control" Test ist, würde die 1 in die Spalte "test" gehen.

Im Wesentlichen bin ich preping dies für einen t.test().

+0

Ich bin ein wenig verwirrt: die Daten, die Sie bereitstellen, werden nicht dem Beispiel zugeordnet, das Sie basierend auf Ihren eigenen Regeln erstellen möchten. Soll es? –

Antwort

1

Verwenden der reshape2 zuzuweisen Bibliothek, kann man Links zu den Originaldaten pflegen:

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

Sie können dazu ifelse verwenden. Für jede Variable, er prüft, ob Purchase falsch ist, in welchem ​​Fall er sonst einen Wert von 0 zugewiesen, überprüft er den Wert von Test_Control zu bestimmen, ob eine 1 oder eine 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)) 
Verwandte Themen