我有一些麻煩R.
我有一個數據集類似於以下,但更長。
A B Pulse
1 2 23
2 2 24
2 2 12
2 3 25
1 1 65
1 3 45
基本上,前兩列是編碼的。 A
有1,2代表2個不同的權重。 B
具有代表3個不同時間的1,2,3。
由於它們是編碼的數值,R會將它們視爲數值變量。 我需要使用因子函數將這些變量轉換爲因子。
幫助?
我有一些麻煩R.
我有一個數據集類似於以下,但更長。
A B Pulse
1 2 23
2 2 24
2 2 12
2 3 25
1 1 65
1 3 45
基本上,前兩列是編碼的。 A
有1,2代表2個不同的權重。 B
具有代表3個不同時間的1,2,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,因此任何print.frame數據都需要在這些級別上查找 - 這是需要花費時間的額外步驟。
存儲不想重複存儲的字符串時,因素非常好,但寧可參考其ID。考慮在這些列中存儲更友好的名稱,以充分受益於因素。
但是每個數字都代表着某種東西。對於A,1代表長,2代表短。對於B,1 2 3代表,1公斤,2公斤,3公斤所以我需要將所有的1,2等轉換爲1公斤,2公斤,長,短等我需要添加標籤。 – math11
嘗試運行上面的代碼,然後將'levels'值分配給更有用的值。例如,'levels(d $ a)< - c(「Long」,「Short」)'。現在,您(或者一位新用戶在查看您的代碼)不必擔心記憶您的ID和您的標籤之間的映射。 R將爲您處理映射,並向您展示標籤。 –
樣本數據
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
如果回答了您的問題,您可以指定一個複選標記。 –