はR

2012-11-28 7 views
25
に要因に

を変数に変換可能な重複:
identifying or coding unique factors using RはR

私は次のようなデータセットを持つR.

といくつかの問題を抱えています、しかしずっと長い。

A B Pulse 
1 2 23 
2 2 24 
2 2 12 
2 3 25 
1 1 65 
1 3 45 

基本的に、最初の2つの列がコード化される。 Aは1,2を持ち、2つの異なる重みを表します。 Bは、3つの異なる時間を表す1,2,3を有する。

数値がコード化されているので、Rはそれらを数値変数として扱います。 これらの変数を要素に変換するには、factor関数を使用する必要があります。

ヘルプ?

+0

あなたの質問に答えた場合は、チェックマークを付けることができます。 –

答えて

38

ここでは例です:

#Create a data frame 
> d<- data.frame(a=1:3, b=2:4) 
> d 
    a b 
1 1 2 
2 2 3 
3 3 4 

#currently, there are no levels in the `a` column, since it's numeric as you point out. 
> levels(d$a) 
NULL 

#Convert that column to a factor 
> d$a <- factor(d$a) 
> d 
    a b 
1 1 2 
2 2 3 
3 3 4 

#Now it has levels. 
> levels(d$a) 
[1] "1" "2" "3" 

あなたのデータを読み込むときは、また、これを処理することができます。例えば、colClassesおよびstringsAsFactorsのパラメータを参照してください。 readCSV()

計算上、このような列を因数分解することはあなたにはあまり役立ちませんし、実際にはプログラムが遅くなる可能性があることに注意してください。ファクタを使用するには、すべての値が背後のIDにマップされている必要があります。そのため、data.frameを印刷するには、これらのレベルでルックアップが必要です。

ファクタは、繰り返し保存したくない文字列を格納するときには効果的ですが、IDで参照することになります。要因から十分に利益を得るには、そのような列にもっとわかりやすい名前を格納することを検討してください。

+0

しかし、それぞれの数字は何かを表しています。 Aの場合は1が長く、2の場合は短くなります。 Bの場合、1 2 3は1kg、2kg、3kgを表しますので、1、2kg、1kg、2kgなどに変換してください。 – math11

+2

上記のコードを実行してから、 'levels'の値をより有用なものに割り当ててみてください。たとえば、 'levels(d $ a)< - c(" Long "、" Short ")'などです。今では(あなたのコードを見ている新しいユーザー)IDとラベルの間のマッピングを暗記する必要はありません。 Rはあなたのためのマッピングを処理し、あなたにラベルを提示するだけです。 –

19

サンプルデータ

myData <- data.frame(A=rep(1:2, 3), B=rep(1:3, 2), Pulse=20:25) 



myData$A <-as.factor(myData$A) 
myData$B <-as.factor(myData$B) 

またはあなたが完全にあなたの列を選択し、うまくそれを包むことができます:

# select columns 
cols <- c("A", "B") 
myData[,cols] <- data.frame(apply(myData[cols], 2, as.factor)) 

levels(myData$A) <- c("long", "short") 
levels(myData$B) <- c("1kg", "2kg", "3kg") 

例:

> myData 
     A B Pulse 
1 long 1kg 20 
2 short 2kg 21 
3 long 3kg 22 
4 short 1kg 23 
5 long 2kg 24 
6 short 3kg 25