2011-12-07 5 views
4

非常に大きな調査データセットの開始郵便番号と終了郵便番号を一致させ、これらの結果を新しいデータフレームに入れたいという問題があります。私は、例示のために使用するデータフレームの例を作成しました。上記のコードを使用し郵便番号によるサブセット(要素のレベル)

ID = c(1,2,3,4,5) 
StartPC = c("AF2 4RE","AF3 5RE","AF1 3DR","AF2 4RE","AF2 4PE") 
EndPC = c("AF2 4RE","NA","AF2 3DR","AX2 4RE","AF2 4PE") 
data<-data.frame(ID,StartPC,EndPC) 

data2 <- subset(data, StartPC==EndPC,na.rm=TRUE) 

、Iは、開始と終了の郵便番号が同じであることにより、唯一のID番号を含むデータフレーム(DATA2)を作成します。 Ops.factor(StartPC、EndPC)で

エラー:要因のレベルセットが出力だけでID番号1に含め5を持っている必要があります

異なっているしかし、私は、エラーメッセージが表示されます新しいデータテーブル

Error in Ops.factor(StartPC, EndPC) : level sets of factors are different 

あなたの二つの列は、文字の要因ではないためだろう

答えて

8

。因数は、カテゴリ変数であり、整数として格納され、ルックアップテーブルは「レベル」です。それらを比較することは実際に基礎となる整数を比較しているので、Rは要因を同じレベルと比較していることを確認します。そうでなければ、あなたは悪いことをしていると判断します。そのような場で

> subset(data, as.character(StartPC)==as.character(EndPC),na.rm=TRUE) 
    ID StartPC EndPC 
1 1 AF2 4RE AF2 4RE 
5 5 AF2 4PE AF2 4PE 

のいずれかを、または最初の場所で文字を使用してデータフレームを作る、またはその両方の列が同じレベルで作られていることを確認します

だから文字に変換します。

+1

'stringAsFactors = FALSE'引数は、read.csv()などで最初にdata.frameを読み込むときに役立ちます。 –