2011-01-31 31 views
0

比方說,我有一個data.frame,看起來像這樣:恢復到因子代碼R

df.test <- data.frame(1:26, 1:26) 
colnames(df.test) <- c("a","b") 

和我申請的一個因素:

df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters) 

現在,我怎麼想它轉換背整數代碼:

as.numeric(df.test[1])## replies with an error code. 

但這個工程:

as.numeric(df.test$a) 

這是爲什麼?

+3

您需要升級您的搜索技能。 ;-)以下是我通過搜索「[r]因子」找到的兩個答案。 [酮](http://stackoverflow.com/questions/4798343/convert-factor-to-integer)。 [兩](http://stackoverflow.com/questions/3418128/r-how-to-convert-a-factor-to-an-integer-numeric-in-r-without-a-loss-of-informat) 。 – 2011-01-31 18:26:19

+1

由於鏈接顯示有兩個選項。假設f包含你想要的數值,你可以做as.numeric(as.character(f)),但是這有缺陷。建議的方式是as.numeric(levels(f))[f]。 – Dason 2011-01-31 19:07:45

+0

當我輸入這些信息時,我必須打開輸入,因爲我自己找到了解決方案。但是,它仍然留下了一個問題。這就是爲什麼上面編輯。 – 2011-01-31 19:16:59

回答

1

通過名字來訪問列給你一個因素載體,它可以被轉換成數字。 但是,數據框是列(列)的列表,當您使用列表中的單個括號運算符和單個數字時,您會得到一個長度爲1的列表。這同樣適用於數據幀,因此df.test[1]會將第一列作爲新數據幀,不能被as.numeric()強制執行。我不知道這個!

> str(df.test$a) 
Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ... 
> str(df.test[1]) 
'data.frame': 26 obs. of 1 variable: 
$ a: Factor w/ 26 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10 ... 
2

as.numeric將一個因素轉換爲數值:

as.numeric(df.test$a) 
1

要回復編輯:請記住,一個因素主要有兩個部分:1)標籤,以及2)潛在的整數代碼。我在評論中鏈接到的兩個答案是將標籤轉換爲數字。如果您只想獲取內部代碼,請按照?factor的示例部分中的說明使用as.integer(df.test$a)。 aL3xa回答了你爲什麼as.numeric(df.test[1])引發錯誤的問題。

3

其實Joshua的鏈接在這裏是不適用的,因爲這個任務並沒有從具有數值解釋的層次中轉化出來。你原來產生錯誤的努力幾乎是正確的。它缺的只是一個逗號前的1:

df.test <- data.frame(1:26, 1:26) 
colnames(df.test) <- c("a","b") 
df.test$a <- factor(df.test$a, levels=c(1:26), labels=letters) 
as.numeric(df.test[,1]) 
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
# [19] 19 20 21 22 23 24 25 26 

或者你也可以使用「[[」

> as.numeric(df.test[[1]]) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
[19] 19 20 21 22 23 24 25 26