2017-03-31 10 views
1

データフレームから因子列のみを選択しようとしています。例は次のとおりです。R - データフレームの因子列のみを選択する

bank[,apply(bank[,names(bank)!="id"], is.factor)] 

しかし、コードは奇妙な動作をします。ステップバイステップ:

sapply(bank[,names(bank)!="id"], is.factor) 

私が取得:

age   sex  region  income  married children   car 
     FALSE  TRUE  TRUE  FALSE  TRUE  FALSE  TRUE 
    save_act current_act mortgage   pep  ageBin 
     TRUE  TRUE  TRUE  TRUE  TRUE 

はOKに見えます。

bank[,sapply(bank[,names(bank)!="id"], is.factor)] 

しかし、結果として、私は、元の銀行のデータフレームのように、すべて同じ列を取得する:今、私はちょうど次のステップにTRUE/FALSEのこの行列を渡すと、私は必要な列のみを取得することを前提としています。何も除外されません。私はそれを試してみましたが、解決策を見つけることができません。私が間違っていることについてのアドバイスはありますか? d.b @

+0

d.bいや@列 –

+0

の束を持つだけでデータフレーム、私はCSVファイルからそれをロードします。特別なことは何もない。 –

+3

[再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供する必要があります。それはあなたを助けることをより容易にするでしょう。 TUE/FALSEの値は、すべての列に一致する必要があります。 「id」列を除外することで、すべてをシフトしています。 – MrFlick

答えて

2
#DATA 
df = mtcars 
colnames(df) = gsub("mpg","id",colnames(df)) 
df$am = as.factor(df$am) 
df$gear = as.factor(df$gear) 
df$id = as.factor(df$id) 

#Filter out 'id' after selecting factors 
df[,sapply(df, is.factor) & colnames(df) != "id"] 
+1

ありがとうございます。私は別人ではないIDを適用する必要があるとは思わなかった。 –

1
df = mtcars 
colnames(df) = gsub("mpg","id",colnames(df)) 
df$am = as.factor(df$am) 
df$gear = as.factor(df$gear) 
df$id = as.factor(df$id) 

library(dplyr) 
df %>% select_if(is.factor) %>% select(-id) 
関連する問題