2016-11-30 75 views
0

我对R很陌生,在创建因子时遇到了一些麻烦。 我应该从数字变量中创建一个因子。这个因素应该有三个层次:不满意(值0到4)“既不/也不”(值5)“满意”(值6到10)。从数值变量中创建一个因子

lsat_factor<-factor(soep$lsat) 
levels(lsat_factor) 
levels(lsat_factor)[0:4] <- ("Dissatisfied") 
levels(lsat_factor)[5]<-("Neither/nor") 
levels(lsat_factor)[6:10]<-("Satisfied") 

我试过这个,但它绝对不行。在此先感谢,

回答

5

我可能只是使用cut

> x <- 0:10 
> cut(x = x,breaks = c(0,4,5,10),include.lowest = TRUE, 
     labels = c('Dissatisfied','Either/Or','Satisfied')) 
[1] Dissatisfied Dissatisfied Dissatisfied Dissatisfied Dissatisfied Either/Or Satisfied Satisfied 
[9] Satisfied Satisfied Satisfied 
Levels: Dissatisfied Either/Or Satisfied 
0

要折叠组,您可以使用列表语法levels<-。例如

# test data 
soep <- data.frame(lsat = letters[1:10]) 

lsat_factor <- factor(soep$lsat) 

table(lsat_factor) 
# lsat_factor 
# a b c d e f g h i j 
# 1 1 1 1 1 1 1 1 1 1 

levels(lsat_factor) <- list(
    "Dissatisfied"=levels(lsat_factor)[1:4], 
    "Neither/nor" = levels(lsat_factor)[5], 
    "Satisfied" = levels(lsat_factor)[6:10] 
) 

table(lsat_factor) 
# lsat_factor 
# Dissatisfied Neither/nor Satisfied 
#   4   1   5 
+0

感谢很多:) –

+0

这似乎是一个不同的问题。看起来你的原始数据是绝对的。我认为这个新的年龄值是数字?如果只有两个类别,则可以使用简单的'ifelse()',或者可以使用'cut()'。但那些确实假定数字值。 – MrFlick