R - 获取数字值与水平标签之间的连接因子

问题描述:

我很努力地找到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:我需要这个,因为我经常会得到不熟悉的数据集,其中包含这些因素。为了解释结果,我需要知道“哪个数字代表什么”。然而,很多时候,我不能要求数据集的创建者出于各种原因。 –

正如其他人所说,整数值简单地沿长度增量的水平。就我个人而言,我发现这最容易在参考表中可视化。

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 

当你有一个输出,

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 

现在“男性”在“关卡:”是第一个。

的因素是为了当你转换为as.numeric,让你的因子水平,所以你可以这样做:

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

factors