Frage Verwechslung zwischen Faktorstufen und Faktorbeschriftungen


Es scheint einen Unterschied zwischen Ebenen und Bezeichnungen eines Faktors in R zu geben. Bis jetzt dachte ich immer, dass Ebenen der "echte" Name von Faktorstufen sind und Bezeichnungen die Namen sind, die für die Ausgabe verwendet werden (wie Tabellen und Plots). Offensichtlich ist dies nicht der Fall, wie folgendes Beispiel zeigt:

df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame':   3 obs. of  2 variables:
 $ v: num  1 2 3
 $ f: Factor w/ 3 levels "a","b","c": 1 2 3

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

Ich dachte, dass die Level ('a', 'b', 'c') irgendwie immer noch beim Scripting erreichbar sind, aber das funktioniert nicht:

> df$f=='a'
[1] FALSE FALSE FALSE

Aber das tut:

> df$f=='Treatment A: XYZ' 
[1]  TRUE FALSE FALSE

Meine Frage besteht also aus zwei Teilen:

  • Was ist der Unterschied zwischen Ebenen und Labels?

  • Ist es möglich, unterschiedliche Namen für Faktorstufen für Skripting und Ausgabe zu haben?

Hintergrund: Für längere Skripte scheint das Erstellen von Skripten mit kurzen Faktorstufen viel einfacher zu sein. Bei Berichten und Plots sind diese kurzen Faktoren jedoch möglicherweise nicht ausreichend und sollten durch genauere Namen ersetzt werden.


76
2018-05-03 12:37


Ursprung


Antworten:


Sehr kurz: Ebenen sind die Eingabe, Etiketten sind die Ausgabe in der factor() Funktion. Ein Faktor hat nur einen level Attribut, das von der labels Argument in der factor() Funktion. Dies unterscheidet sich vom Konzept der Labels in statistischen Paketen wie SPSS und kann am Anfang verwirrend sein.

Was machen Sie in dieser Codezeile?

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))

sagt R, dass es einen Vektor gibt df$f 

  • die du in einen Faktor transformieren willst,
  • in denen die verschiedenen Ebenen als a, b und c codiert sind
  • und für die Sie möchten, dass die Ebenen als Behandlung A usw. gekennzeichnet werden.

Die Faktorfunktion sucht nach den Werten a, b und c, wandelt sie in numerische Faktorklassen um und addiert die Labelwerte zu den level Attribut des Faktors. Dieses Attribut wird verwendet, um die internen numerischen Werte in die korrekten Beschriftungen zu konvertieren. Aber wie Sie sehen, gibt es kein label Attribut.

> df <- data.frame(v=c(1,2,3),f=c('a','b','c'))    
> attributes(df$f)
$levels
[1] "a" "b" "c"

$class
[1] "factor"

> df$f <- factor(df$f, levels=c('a','b','c'),
+   labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))    
> attributes(df$f)
$levels
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

$class
[1] "factor"

99
2018-05-03 12:48



Ich habe ein Paket "lfactors" geschrieben, mit dem Sie auf Ebenen oder Labels verweisen können.

# packages
install.packages("lfactors")
require(lfactors)

flips <- lfactor(c(0,1,1,0,0,1), levels=0:1, labels=c("Tails", "Heads"))
# Tails can now be referred to as, "Tails" or 0
# These two lines return the same result
flips == "Tails"
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE
flips == 0 
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE

Beachten Sie, dass ein lfactor erfordert, dass die Ebenen numerisch sind, damit sie nicht mit den Beschriftungen verwechselt werden können.


7
2018-05-06 04:15