2016-07-22 3 views
0

私は2つのデータフレームを持っています.1つは140の変数と100の変数です。最初のものは40の余分な変数を持っています。そうでなければデータフレームの変数は同じです。さて、私は、同じではない変数を削除しようとしました:Rで共通する2つのデータフレームに変数をドロップする方法はありますか?

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 
    } 
    } 
} 

しかし、これは動作しません、何も起こりません。

+5

あなたはDF1 [名が(DF2)] ' – Sumedh

+0

@Sumedhが、私はそれを望んでいたとおりに動作し'試すことができます!ありがとう – Floris

答えて

0

このお試しください:これを試してみてください

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

これは私に 'Error in -extraVars:単項演算子への無効な引数 'というエラーを与えます。 – Floris

+0

' intersect(x、y) 'を使用して' clean < - df1 [、intersect(names(df1)、names(df2)) ]; ' – oens

0

を:

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),]) 

は、あなたがオブジェクトに保存しておきたい変数を収集し、私はこの基本R.を使用して EXを行うだろう次に、ドロップする代わりに必要な変数をそのまま使用してください。

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

これは生成する必要がありますから、

> 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 

> 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 
関連する問題