2016-11-30 5 views
0

Ich bin ziemlich neu in R und ich habe einige Probleme mit der Erstellung von Faktoren. Ich sollte einen Faktor aus einer numerischen Variablen erstellen. Dieser Faktor sollte drei Stufen haben: unzufrieden (Werte 0 bis 4) "weder/noch" (Wert 5) "zufrieden" (Werte 6 bis 10).Erstellen eines Faktors aus einer numerischen Variablen

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") 

Ich habe es versucht, aber es funktioniert definitiv nicht. Vielen Dank im Voraus,

Antwort

5

würde ich wahrscheinlich cut benutzen Sie einfach:

> 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

Gruppen auszublenden, können Sie die Liste Syntax für levels<- verwenden können. Zum Beispiel

# 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

vielen Dank :) –

+0

Wenn ich will auch einen Faktor mit nur zwei Ebenen schaffen, die respondants von soep $ Alter zu identifizieren, die unter dem Alter von über 18, mit den beiden Ebenen „unter dem Alter“ und " Erwachsene "Was ist der beste Weg, es zu tun? –

+0

Das scheint eine andere Frage. Es schien, dass deine ursprünglichen Daten kategorisch waren. Ich nehme an, dass dieser neue Alterswert numerisch ist? Sie können ein einfaches 'ifelse()' verwenden, wenn Sie nur zwei Kategorien haben, oder Sie können 'cut()' mit mehr verwenden. Aber diese nehmen numerische Werte an. – MrFlick

Verwandte Themen