Im Anschluss an den Kommentar von ayk, ich bin ein Beispiel bereitstellt. Es sieht für mich so aus, als wenn Sie ein data_frame mit einer Spalte einer Faktor- oder Zeichenklasse haben, die Werte von NA hat, kann diese nicht verteilt werden, ohne sie entweder zu entfernen oder die Daten neu zu klassifizieren. Dies ist spezifisch für einen data_frame (beachten Sie die dplyr-Klasse mit dem Unterstrich im Namen), da dies in meinem Beispiel funktioniert, wenn Sie Werte von NA in einem dat.frame haben. Zum Beispiel wird eine leicht modifizierte Version des obigen Beispiels:
ist der Datenrahmen
library(dplyr)
library(tidyr)
df_1 <- data_frame(Type = c("TypeA", "TypeA", "TypeB", "TypeB"),
Answer = c("Yes", "No", NA, "No"),
n = 1:4)
df_1
, die eine data_frame gibt, die wie diese dann
Source: local data frame [4 x 3]
Type Answer n
(chr) (chr) (int)
1 TypeA Yes 1
2 TypeA No 2
3 TypeB NA 3
4 TypeB No 4
aussieht, wenn wir versuchen, es in Ordnung zu bringen wir eine Fehlermeldung erhalten:
df_1 %>% spread(key=Answer, value=n)
Error: All columns must be named
Aber wenn wir die NA dann entfernen sie es ‚funktioniert‘:
Das Entfernen der NAs kann jedoch nicht das gewünschte Ergebnis liefern: d. H. Sie möchten, dass diese in Ihre aufgeräumte Tabelle aufgenommen werden. Sie können die Daten direkt ändern, um die NAs in einen aussagekräftigeren Wert zu ändern. Alternativ können Sie Ihre Daten in einen dat.frame ändern und dann gut verteilen:
as.data.frame(df_1) %>% spread(key=Answer, value=n)
Type No Yes NA
1 TypeA 2 1 NA
2 TypeB 4 NA 3
Diese Methode funktioniert in dem oben gezeigten Code. Wenn jedoch die n-Spalte der ersten Tabelle (d. H. Df_1) unter Verwendung der Tally-Funktion systemgeneriert wird. Diese Methode funktioniert nicht. Es gibt mir immer noch den Fehler: Alle Spalten müssen benannt werden. Der Code, den ich verwendet habe, um die n-Spalte unter Verwendung von Tally zu erzeugen, ist oben aufgeführt. Sieht so aus, als ob der Spread in diesem Fall die Spalte n nicht erkennt. Irgendwelche anderen Vorschläge? – ayk
Idee 1: benutze dplyr :: ungroup() am Ende der Erstellung von 'df_1'. – wibeasley
Idee 2: cast mit 'as.data.frame()'. Idee 3: Ausgabe mit 'dput()', damit wir die Struktur besser sehen können. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example. Ansonsten ist es schwierig zu sehen, wie du 'df_1' bekommen hast. – wibeasley