R - 获取因子中数值与水平标签之间的联系
R - Obtain the connection between the numeric values and the level labels in a factor
我正在努力寻找 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$sex
[1] female male female female male male female
Levels: female male
在名为 "Levels" 的行中,第一个是 'female',第二个是 'male',因此 'female' 等于 1,而 'male' 等于2.
如果你想改变 'male' 为 1 而 'female' 为 2,你应该阅读函数 relevel
:
test$sex <- relevel(test$sex, ref = "male")
test$sex
[1] female male female female male male female
Levels: male female
现在"Levels:"中的'male'是第一个。
因子是有序的,当你转换为 as.numeric 时,你可以得到因子水平,所以你可以这样做:
factors <-data.frame(levels = as.numeric(test$color)[1:length(levels(test$color))], names = paste(levels(test$color)))
factors
正如其他人所说,整数值只是沿着级别的长度递增。就个人而言,我发现这在参考文献中最容易形象化 table。
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
我正在努力寻找 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$sex
[1] female male female female male male female
Levels: female male
在名为 "Levels" 的行中,第一个是 'female',第二个是 'male',因此 'female' 等于 1,而 'male' 等于2.
如果你想改变 'male' 为 1 而 'female' 为 2,你应该阅读函数 relevel
:
test$sex <- relevel(test$sex, ref = "male")
test$sex
[1] female male female female male male female
Levels: male female
现在"Levels:"中的'male'是第一个。
因子是有序的,当你转换为 as.numeric 时,你可以得到因子水平,所以你可以这样做:
factors <-data.frame(levels = as.numeric(test$color)[1:length(levels(test$color))], names = paste(levels(test$color)))
factors
正如其他人所说,整数值只是沿着级别的长度递增。就个人而言,我发现这在参考文献中最容易形象化 table。
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