可能性のある複製:
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
には2つの異なる重みを表す1、2があります。 B
には1、2、3があり、3つの異なる時間を表します。
コード化された数値であるため、Rはそれらを数値変数として扱います。これらの変数を因子に変換するには、因子関数を使用する必要があります。
助けて?
以下に例を示します。
#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で参照する文字列を保存する場合、要素は優れています。そのような列にもっとわかりやすい名前を保存することを検討してください。
次のサンプルを考えます
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