2012-12-04 6 views
8

Ich habe einen Datensatz mit Antworten auf einen Likert-Artikel auf einer 9pt-Skala. Ich möchte eine Häufigkeitstabelle (und einen Barplot) der Daten erstellen, aber einige Werte auf der Skala treten in meinem Dataset nie auf. Daher entfernt table() diesen Wert aus der Häufigkeitstabelle. Ich möchte es stattdessen den Wert mit einer Häufigkeit von 0 präsentieren. Das heißt, mit der folgenden DatasetNullfrequenzen in Häufigkeitstabelle für Likert-Daten einschließen

# Assume a 5pt Likert scale for ease of example 
data <- c(1, 1, 2, 1, 4, 4, 5) 

Ich mag würde die folgende Frequenztabelle erhalten, ohne manuell auf eine Spalte 3 mit dem Wert 0 Namen einfügen.

1 2 3 4 5 
3 1 0 2 1 

Ich bin neu in R, vielleicht habe ich etwas übersehen einfach, aber ich habe nicht über eine Funktion oder Option kommen, die das gewünschte Ergebnis liefert.

Antwort

5

table erzeugt eine Zufälligkeit erzeugt, während tabular eine Frequenz erzeugt, Tabelle, die Nullzählungen enthält.

tabulate(data) 
# [1] 3 1 0 2 1 

Eine andere Möglichkeit (wenn Sie ganze Zahlen von 1 beginnend - aber für andere Fälle leicht modifizierbar):

setNames(tabulate(data), 1:max(data)) # to make the output easier to read 
# 1 2 3 4 5 
# 3 1 0 2 1 
+0

Gut. Danke, aber tabulate ist nicht die universelle Möglichkeit, Frequenztabellen zu erstellen. Es arbeitet mit positiven ganzen Zahlen. versuchen, z.B. 'tabulate (0: 1)' oder 'tabulate (-50000: 1)' (rate, warum die Ausgabe identisch ist, wenn die Argumente so unterschiedlich sind). Tabulate arbeitet an Ihrem speziellen Fall (Sie haben zufällig eine "Likert" -Skala, die bei 1 beginnt, und bei Faktoren (weil Ebenen nach Konvention als positive aufeinanderfolgende ganze Zahlen beginnend mit 1 codiert sind). Sie funktioniert nicht bei Zeichenvektoren oder mit Null und negative Werte – lebatsnok

+0

... während ich meine Antwort gerne akzeptiere, würde ich sagen, dass die andere Antwort universeller ist: Konvertiere x zu Faktor und mache dann eine eindimensionale Kontingenztabelle mit 'table' arbeiten mit allen Arten von Daten, während "tabulate" nur mit einigen speziellen Fällen funktioniert. – lebatsnok

+0

Tatsächlich funktioniert das nicht, wenn die 0-Häufigkeitsdaten dem Maximum entsprechen. Zum Beispiel, in dem obigen Beispiel, wenn es keine gab 5 in 'data',' tabulate' würde es auch nicht zeigen. – AugSB

17

EDIT:

tabular Häufigkeitstabellen während table Kontingenztafeln erzeugt. Um jedoch wie in dem obigen Beispiel in einer eindimensionalen Kontingenztabelle Nullfrequenzen zu erhalten, funktioniert der unten stehende Code natürlich noch.


This question lieferte den fehlenden Link. Durch die Umwandlung zu einem Faktor der Likert Element, und spezifiziert explizit die Ebenen Ebenen mit einer Frequenz von 0 sind noch

gezählten
data <- factor(data, levels = c(1:5)) 
table(data) 

die gewünschte Ausgangstabelle

0

Wenn Sie schnell die Zählungen oder Proportionen für mehrere likert Einzelteile und erhalten berechnen wollen Ihre Ausgabe in einem data.frame, mag Ihnen die Funktion psych::response.frequencies im psych Paket gefallen.

Hier können einige Daten erstellen (beachten Sie, dass es keine 9s sind):

df <- data.frame(item1 = sample(1:7, 2000, replace = TRUE), 
       item2 = sample(1:7, 2000, replace = TRUE), 
       item3 = sample(1:7, 2000, replace = TRUE)) 

Wenn Sie den Anteil in jeder Kategorie

psych::response.frequencies(df, max = 1000, uniqueitems = 1:9) 

Sie erhalten folgendes berechnen möchten:

  1  2  3  4  5  6  7 8 9 miss 
item1 0.1450 0.1435 0.139 0.1325 0.1380 0.1605 0.1415 0 0 0 
item2 0.1535 0.1315 0.126 0.1505 0.1535 0.1400 0.1450 0 0 0 
item3 0.1320 0.1505 0.132 0.1465 0.1425 0.1535 0.1430 0 0 0 

Wenn Sie zählen möchten, können Sie mit th multiplizieren e Stichprobengröße:

psych::response.frequencies(df, max = 1000, uniqueitems = 1:9) * nrow(df) 

Sie erhalten die folgenden:

 1 2 3 4 5 6 7 8 9 miss 
item1 290 287 278 265 276 321 283 0 0 0 
item2 307 263 252 301 307 280 290 0 0 0 
item3 264 301 264 293 285 307 286 0 0 0 

Ein paar Anmerkungen:

  • der Standard max 10. Somit ist, wenn Sie mehr als 10 Antwortmöglichkeiten haben, Du wirst Probleme haben. Andernfalls könnten Sie in Ihrem Fall und in vielen Likert-Objektfällen das Argument max weglassen.
  • uniqueitems gibt die möglichen Werte an. Wenn alle Werte in mindestens einem Element vorhanden sind, wird dies aus den Daten abgeleitet.
  • Ich denke, die Funktion funktioniert nur mit numerischen Daten. Also, wenn Sie Ihre Likert-Kategorien mit "Trifft überhaupt nicht zu" haben, wird es nicht funktionieren.