2016-08-24 56 views
0

我很努力地找到R因子對象中存在的數字(整數)值與其級別標籤之間的連接。我知道如何定義關卡和標籤。但是讓我們假設我得到一個陌生數據集,其中我會找到幾個因素(這裏:性別&顏色):R - 獲取數字值與水平標籤之間的連接因子

test <- data.frame(
        factor(c(1,2,1,1,2,2,1), 
          levels= c(1,2), 
          labels = c("female", "male") 
         ), 
        factor(c(3,2,2,1,4,4,5), 
          levels= c(1,2,3,4,5), 
          labels= c("red", "green", "blue", "yellow", "brown") 
         ) 
       ) 

names(test) <- c("sex", "color") 
test 

     sex color 
1 female blue 
2 male green 
3 female green 
4 female red 
5 male yellow 
6 male yellow 
7 female brown 

我將能夠通過使用attributes()獲得級別的標籤,我會能夠獲得數值例如通過使用test$sex <- as.numeric(test$sex)
但我怎麼知道,1等於女,2等於男?同樣的事情(甚至更糟糕)的顏色。我如何建立連接?

感謝

+0

什麼是你期望的輸出?一個表格會告訴哪個數字代表什麼? –

+2

您可以使用'levels'功能提取水平。整數值對應於水平矢量中的水平位置。但爲什麼你需要這個? – Roland

+0

RonakShah:是的,桌子是一個解決方案。我其實只需要知道哪個數字代表什麼。 @Roland:我需要這個,因爲我經常會得到不熟悉的數據集,其中包含這些因素。爲了解釋結果,我需要知道「哪個數字代表什麼」。然而,很多時候,我不能要求數據集的創建者出於各種原因。 –

回答

1

正如其他人所說,整數值簡單地沿長度增量的水平。就我個人而言,我發現這最容易在參考表中可視化。

test <- data.frame(
    sex = factor(c(1,2,1,1,2,2,1), 
       levels= c(1,2), 
       labels = c("female", "male") 
), 
    color = factor(c(3,2,2,1,4,4,5), 
       levels= c(1,2,3,4,5), 
       labels= c("red", "green", "blue", "yellow", "brown") 
) 
) 

# Make a reference table 
data.frame(level = seq_along(levels(test$color)), 
      label = levels(test$color)) 

    level label 
1  1 red 
2  2 green 
3  3 blue 
4  4 yellow 
5  5 brown 

如果你想獲得的所有數據幀中的因素的引用,您可以向量化代碼:

factor_reference <- function(data) 
{ 
    Ref <- 
    lapply(data, 
      function(x) 
      { 
      if (is.factor(x)) data.frame(level = seq_along(levels(x)), 
              label = levels(x)) 
      else NULL 
      } 
    ) 

    Ref[!vapply(Ref, is.null, logical(1))] 
} 

factor_reference(test) 
$sex 
    level label 
1  1 female 
2  2 male 

$color 
    level label 
1  1 red 
2  2 green 
3  3 blue 
4  4 yellow 
5  5 brown 
1

當你有一個輸出,

test$sex 
[1] female male female female male male female 
Levels: female male 

在行被稱爲「級別」首先是「女性」和第二個是「男性」,因此「女性」等於1,和「男性」等於2

如果你想改變這種「男性」是1和「女」是2,你應該閱讀有關功能relevel

test$sex <- relevel(test$sex, ref = "male") 
test$sex 
[1] female male female female male male female 
Levels: male female 

現在「男性」在「關卡:」是第一個。

0

的因素是爲了當你轉換爲as.numeric,讓你的因子水平,所以你可以這樣做:

factors <-data.frame(levels = as.numeric(test$color)[1:length(levels(test$color))], names = paste(levels(test$color))) 

factors