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等于男?同样的事情(甚至更糟糕)的颜色。我如何建立连接?
感谢
答
正如其他人所说,整数值简单地沿长度增量的水平。就我个人而言,我发现这最容易在参考表中可视化。
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
什么是你期望的输出?一个表格会告诉哪个数字代表什么? –
您可以使用'levels'功能提取水平。整数值对应于水平矢量中的水平位置。但为什么你需要这个? – Roland
RonakShah:是的,桌子是一个解决方案。我其实只需要知道哪个数字代表什么。 @Roland:我需要这个,因为我经常会得到不熟悉的数据集,其中包含这些因素。为了解释结果,我需要知道“哪个数字代表什么”。然而,很多时候,我不能要求数据集的创建者出于各种原因。 –