2016-05-11 4 views
1

データフレームに列型の要素があり、列ではない "index"という名前の列があります。私は、列因子tyepeある特定の型の列と特定の名前付き列をデータフレームから抽出する-R

  • 「インデックス」欄を抽出したいです。

例えば

df<-data.frame(a=runif(10),b=as.factor(sample(10)),index=as.numeri(1:10)) 

だからDFがあるみましょう:

  a b index 
0.16187501 5  1 
0.75214741 8  2 
0.08741729 3  3 
0.58871514 2  4 
0.18464752 9  5 
0.98392420 1  6 
0.73771960 10  7 
0.97141474 6  8 
0.15768011 7  9 
0.10171931 4 10 

所望の出力は

DF1(それはDF1と呼ばれるデータフレームであるとする)である:

b index 
    5  1 
    8  2 
    3  3 
    2  4 
    9  5 
    1  6 
    10  7 
    6  8 
    7  9 
    4 10 

は、factor列と "index"という名前の列で構成されます。

私はしかし、このコードは動作しないようなコード

vars<-apply(df,2,function(x) {(is.factor(x)) || (names(x)=="index")}) 

    df1<-df[,vars] 

を使用しています。 Rのapply types関数を使用してdf1を返すにはどうすればよいですか?私はどんな助けも非常にうれしく思います。どうもありがとう。

あなたが行うことができ

答えて

2

df[ , sapply(df, is.factor) | grepl("index", names(df))] 

私は2つの事があなたの方法で間違っていたと思います。まず、applyが要因として値を格納しない行列にデータフレームを変換し(より上のためhereを見ますこの)。また、行列では、すべての値が同じモード(文字、数値など)でなければなりません。この場合、すべてが文字に強制的に変換されるため、見つける必要はありません。

第二に、列名は、そうnames(x)戻りNULLnames(x)=="index"戻りlogical(0)(私の知る限り)apply内でアクセスすることはできません。

+0

あなたの時間と詳細な説明に感謝します。それは私のために非常に便利でした。 Thanskもう一度。 – oercim

関連する問題