obserwuję na komentarz z Ayk, mam zapewnienie przykład. Wydaje mi się, że gdy masz ramkę danych z kolumną klasy czynnikowej lub znakowej, która ma wartości NA, nie można tego rozprzestrzeniać bez ich usunięcia lub ponownej klasyfikacji danych. Jest to specyficzne dla parametru data_frame (zwróć uwagę na klasę dplyr z podkreśleniem w nazwie), ponieważ działa to w moim przykładzie, gdy masz wartości NA w data.frame. Na przykład, nieco zmodyfikowana wersja powyższego przykładu:
Oto dataframe
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
co daje data_frame który wygląda tak
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
Potem, kiedy staramy się je uporządkować , otrzymujemy komunikat o błędzie:
df_1 %>% spread(key=Answer, value=n)
Error: All columns must be named
Ale jeśli usuniemy NA, to "działa":
df_1 %>%
filter(!is.na(Answer)) %>%
spread(key=Answer, value=n)
Source: local data frame [2 x 3]
Type No Yes
(chr) (int) (int)
1 TypeA 2 1
2 TypeB 4 NA
Jednak usunięcie NA może nie dać pożądanego rezultatu: to znaczy, że można je uwzględnić w tabeli uporządkowanej. Można zmodyfikować dane bezpośrednio, aby zmienić NA na bardziej opisową wartość. Ewentualnie możesz zmienić swoje dane na data.frame, a potem wszystko się rozejdzie:
as.data.frame(df_1) %>% spread(key=Answer, value=n)
Type No Yes NA
1 TypeA 2 1 NA
2 TypeB 4 NA 3
Ta metoda działa w kodzie pokazanym powyżej. Jednakże, gdy kolumna n na pierwszej tabeli (tj. Df_1) jest generowana przez system przy użyciu funkcji tally. Ta metoda nie działa. Nadal daje mi błąd: wszystkie kolumny muszą być nazwane. Kod, którego użyłem do wygenerowania kolumny n przy pomocy tally, wymieniono powyżej. Wygląda na to, że rozkładówka nie rozpoznaje w tym przypadku kolumny n. Jakieś inne sugestie? – ayk
Idea 1: użyj dplyr :: ungroup() na końcu tworzenia 'df_1'. – wibeasley
Idea 2: rzutowanie z 'as.data.frame()'. Idea 3: wyjście z 'dput()', dzięki czemu możemy zobaczyć strukturę lepiej. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example. W przeciwnym razie trudno jest zobaczyć, jak uzyskałeś 'df_1'. – wibeasley