2016-05-18 16 views
1

So habe ich eine csv, die ich manipuliert haben mich diese Tabelle CompletionKategorien an einen Bereich von Werten (Prozentsätzen) anhängen und sortieren?

dput(Completion) 

structure(list(value = structure(1:16, .Label = c("0%", "100%", "13%", "15%","16%", "24%", "26%", "28%", "33%", "40%", "50%", "53%", "66%", "73%", "75%", "93%"), class = "factor"), All = c(13L, 0L, 3L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 2L, 0L, 1L, 0L, 3L), 
M0 = c(14L, 10L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L), M1 = c(17L, 6L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L), M2 = c(21L, 4L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), M3 = c(21L, 
2L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L)), 
.Names = c("value", "All", "M0", "M1", "M2", "M3"), row.names = c(NA, 16L), class = 
c("cast_df", "data.frame"), idvars = "value", rdimnames = list(structure(list(value = 
structure(1:16, .Label = c("0%", "100%", "13%", "15%", "16%", "24%", "26%", "28%", "33%", 
"40%", "50%", "53%", "66%", "73%", "75%", "93%"), class = "factor")), 
.Names = "value", row.names = c("0%", "100%", "13%", "15%", "16%", "24%", "26%", "28%", 
"33%", "40%", "50%", "53%", "66%", "73%", "75%", "93%"), class = "data.frame"), 
structure(list(Module = structure(1:5, .Label = c("All", 
"M0", "M1", "M2", "M3"), class = "factor")), .Names = "Module", row.names = c("All", 
"M0", "M1", "M2", "M3"), class = "data.frame")), .Label = 
c("0-49","50-59","60-69", "70-79", 
"80-89", ">90")) 

Diese Tabelle zeigt die Anzahl der Menschen genannt zu geben, die (Wert)% eines gegebenen Moduls in einem Kurs abgeschlossen.

Was ich tun möchte, ist, Kategorien für die Werte wie folgt zu erstellen; Mehrheit (90% -100%), Erheblich (75% -89%), Teilweise (50% -74%), Minimal (1% -49%) und Unvollständig (0%) würde ich dann gerne sein Lage, eine Zählung der alle Instanzen dieses durch Modul, wie diese zu bekommen:

   M0  M1  M2  M3  All 
Majority  1  2  3  4  5 
Substantial 5  4  3  2  1 
Partial  4  3  2  1  5 
Minimal  3  2  1  5  4 
Incomplete  2  1  5  4  3 

die Zahl jeder der Instanzen der Tabelle füllen würde.

Gibt es eine Möglichkeit, dies zu tun? Ich habe versucht, verschiedene Pivot-Tabellen zu erstellen und Ebenen anzuhängen.

comp.rate <- Completion$value 
comp.rate <- ordered(comp.rate, levels = c("Majority", "Substantial", "Partial", "Minimal", 
"Incomplete")) 

Ich glaube, ich weiß nicht, wie die Werte, die ich auf diesen Ebenen zuordnen wollen, und dann wiederum erhalten R die Häufigkeit ihres Auftretens auszuspucken. Ich hatte auch Probleme, weil die Werte in Prozentform sind ... und nicht dezimal. Ich habe meinen vollständigen Code nicht beigefügt, aber ich kann, wenn es irgendeinen Nutzen hat ... Jede Hilfe wird sehr geschätzt. Vielen Dank!

+0

Bitte geben Sie anstelle eines Screenshots die Ausgabe von 'dput (Completion)' an, damit andere Ihr Beispiel schnell reproduzieren können. Können Sie sich außerdem über die Interpretation von 'dat.frame'' Completion' im Klaren sein - zum Beispiel die erste Zeile (0%) für All = 13 und wie steht diese für die letzte Zeile (93%)? Alles = 3? – JasonAizkalns

+0

Hey! Lassen Sie es mich wissen, wenn der Ausdruck das ist, was Sie meinten ... Die Spalte Wert enthält alle Prozentsätze, die die Teilnehmer in diesem Kurs erreicht haben. Ihr Beispiel (0%; alle = 13) bedeutet, dass 13 Personen für den gesamten Kurs 0% abgeschlossen haben. Für die letzte Reihe bedeutet dies, dass 3 Personen 93% des Kurses absolvierten. Gleiches mit den Modulen. In der 5. Reihe für M2 hat 1 Person 16% dieses Moduls absolviert. Ich möchte diese Prozentsätze in Bereiche einteilen, anstatt jeden möglichen Prozentsatz, der produziert wird. Lassen Sie es mich wissen, wenn ich noch etwas weiter erklären kann. Dies ist mein erster Beitrag, daher bin ich neu gefragt: P Danke! –

Antwort

1

Sie können etwas tun:

Zuerst müssen Sie den Prozentsatz Spalt auf einen numerischen verwandeln mit gsub

d$value <- as.numeric(gsub("[%]", "", d$value)) 

dann können Sie alle Vorkommen mit einem Zustand zählen und colSums:

#Majority(90%-100%) 
colSums(d[ d$value >= 90, ]) 
value All M0 M1 M2 M3 
    193  3 10  6  4  2 

# or Substantial(75%-89%) 
colSums(d[ d$value >= 75 & d$value < 89, ]) 
value All M0 M1 M2 M3 
    75  0  0  0  0  2 

Speichern alle zusammen in einem data.frame:

a1 <- colSums(d[ d$value >= 90,]) 
a2 <- colSums(d[ d$value >= 75 & d$value < 89, ]) 
result <- data.frame(rbind(a1, a2)) 
result$value <- c("Majority", "Substantial") 
result 
     value All M0 M1 M2 M3 
a1 Majority 3 10 6 4 2 
a2 Substantial 0 0 0 0 2 
+0

Vielen Dank! Das hat perfekt funktioniert! –