43

重複の可能性:
R を使用した固有因子の識別またはコーディング

Rで困っています。

次のようなデータセットがありますが、はるかに長いです。

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

基本的に、最初の 2 列がコード化されます。A2 つの異なる重みを表す 1、2 があります。 B3 つの異なる時間を表す 1、2、3 があります。

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

ヘルプ?

4

2 に答える 2

59

次に例を示します。

#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で参照する必要があります。要因を十分に活用するには、このような列にわかりやすい名前を格納することを検討してください。

于 2012-11-28T20:38:01.700 に答える
32

次のサンプルが与えられた

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
于 2012-11-28T20:41:19.347 に答える