2016-04-12 8 views
1

Ich habe einen großen Datensatz und ich möchte die Ergebnisse Schleife, die Spalte als vorhanden in einer Liste subtrahieren und das Ergebnis für jede Zeile in einer neuen Spalte ausgeben.Hinzufügen neuer Spalten im Datenrahmen durch Subtrahieren Spalte aus einer Liste

ref1 <- samples Controls 
     E_2334188 E_2334207 
     E_2334202 E_2334221 

df1 <- 
     Chr Start End Feature   E_2334188 E_2334202 E_2334207 E_2334221 
     1 740001 760000 1:740001-760000 1.6832013 0.8346011 -0.23045394 1.5974912 
     1 760001 780000 1:760001-780000 -0.3231613 -1.8504905 0.13668752 -0.38662600 
     1 780001 800000 1:780001-800000 -0.3936060 -2.2163153 -0.15266541 -0.60706691 



ind <- which(names(df1) %in% ref1$samples) 
rnd <- which(names(df1) %in% ref1$controls) 

    df2 <- df1[,c(1:4)] 
    df2$newcol <- 0 

    for (i in 1:nrow(ref1)){ 
     n <- df1[ind]-df1[rnd] 
     df2$newcol[i] <- n 
    } 

Ergebnis

df2 <- 


     Chr Start End Feature   E_2334188 E_2334202 
      1 740001 760000 1:740001-760000 1.913655 -0.7628901 
      1 760001 780000 1:760001-780000 -0.4598488 -1.463865 
      1 780001 800000 1:780001-800000 -0.2409406 -1.609248 

Antwort

1

erwartet Wir können die 'DF1' basierend auf den Elementen in 'Proben' und "Controls Teilmenge, subtrahieren sie, und cbind mit den ersten 4 Spalten von 'DF1' .

cbind(df1[1:4],df1[ref1$samples]- df1[ref1$Controls]) 
# Chr Start End   Feature E_2334188 E_2334202 
#1 1 740001 760000 1:740001-760000 1.9136552 -0.7628901 
#2 1 760001 780000 1:760001-780000 -0.4598488 -1.4638645 
#3 1 780001 800000 1:780001-800000 -0.2409406 -1.6092484 

HINWEIS: Wenn die ‚Proben‘ und "Controls Spalten factor Klassen sind, zu character konvertieren und den gleichen Ansatz verwenden.

cbind(df1[1:4],df1[as.character(ref1$samples)]- df1[as.character(ref1$Controls)]) 
+0

Ich habe einen großen Datensatz. Mit 74 Spalten, für ein einfaches Verständnis, ich Teilmenge die Daten – beginner

+0

@beginner Es ist nicht wirklich wichtig. Wenn Sie Spaltennamen in den 'Beispielen' und 'Controls' von 'Ref1' haben, werden im Grunde die entsprechenden Spalten von 'df1' substrahiert und gleich große Datasets subtrahiert. – akrun

+0

@beginner Hier gehe ich davon aus, dass die Spalten in der gleichen Zeile (Spaltennamen) von 'ref1' subtrahiert werden sollen. – akrun

Verwandte Themen