2016-07-22 7 views
0

Ich habe zwei Datenrahmen, einer mit 140 Variablen, der andere mit 100. Der erste hat 40 zusätzliche Variablen, die ich nicht will, sonst sind die Variablen in den Datenrahmen gleich. Jetzt habe ich versucht, die Variablen fallen lassen, die nicht die gleichen sind, indem Sie tun:Wie man Variablen in zwei Datenrahmen löscht, die sie in R nicht gemeinsam haben?

drop_var <- function(df1,df2) {    
    for (i in colnames(df1)) {    #for variable i in df1, if i is not in df2 then drop variable i. 
    if (!(i %in% colnames(df2))) { 
     df1$i <- NULL 
    } 
    } 
} 

Allerdings funktioniert das nicht, passiert nichts.

+5

Sie können versuchen, 'df1 [Namen (DF2)]' – Sumedh

+0

@Sumedh funktioniert genau so, wie ich es wollte! Danke – Floris

Antwort

0

Try this:

extraVars <- setdiff(names(df1), names(df2)) 
df1_test <- subset(df1, -extraVars) 
+0

Das gibt mir den Fehler "Fehler in -extraVars: ungültiges Argument für unären Operator" – Floris

+0

Verwenden Sie 'schneiden (x, y)', so 'clean <- df1 [, schneiden (Namen (df1), Namen (df2)) ]; ' – oens

0

Try this:

Sammeln Sie die Variable, die Sie in einem Objekt halten wollen, würde ich tun, diese Basis R. mit ex:

df <- data.frame(a=rnorm(100), 
       b=rnorm(100), 
       c=rnorm(100), 
       d=rnorm(100), 
       e=rnorm(100), 
       f=rnorm(100), 
       g=rnorm(100)) 


df1<-as.matrix(as.character(names(df))) 

drop<-as.vector(df1[c(1:3,5,6),]) 

Dann behalten Sie einfach die Variablen, die Sie wollen, statt sie fallen zu lassen

df3 <- subset(df, select = !(names(df) %in% c(drop))) 

Dies sollte produzieren:

> head(df3) 
      d   g 
1 -1.3697508 -0.1414473 
2 0.3404581 0.9168616 
3 -0.9436178 0.2139926 
4 0.3428353 -0.5360478 
5 -0.3612498 -0.6443705 
6 2.2175504 -0.8422576 

Von:

> head(df) 
      a   b   c   d 
4 -1.14816083 -2.27262219 1.7403998 0.3428353 
7 -0.51135701 0.08747125 0.2614962 -1.4623207 
11 0.32353664 0.40597367 -0.7161519 1.4011651 
14 -1.19320503 0.33131922 0.4805208 -0.2811984 
18 -0.08023675 0.82423082 -0.2184070 1.4679359 
21 -0.42432261 0.46067636 0.5329394 0.6764477 
      e   f   g 
4 -0.51036700 1.01889198 -0.53604779 
7 0.07670036 -0.89020788 1.60280134 
11 1.55295828 0.08932072 0.16203588 
14 -1.66679770 0.95550962 0.04557572 
18 -0.53634264 0.63073156 -0.04173638 
21 0.39662023 0.84527703 -0.18390707