Following ayk comment, I will give an example. It seems to me that when you have a data_frame with a factor or symbol class column that has NA values, this cannot be propagated without deleting them or reclassifying the data. This is typical of data_frame (note the dplyr class with an underscore in the name), since this works in my example when you have NA values ββin data.frame. For example, a slightly modified version of the above example:
Here is the data frame
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
Which gives a data_frame that looks like this
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
Then, when we try to remove it, an error message appears:
df_1 %>% spread(key=Answer, value=n) Error: All columns must be named
But if we remove NA, then it "works":
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
However, removing NA may not give you the desired result: for example, you might want to include them in your table. You can change the data directly to change the NA to a more descriptive meaning. Alternatively, you can change your data to data.frame, and then it spreads just fine:
as.data.frame(df_1) %>% spread(key=Answer, value=n) Type No Yes NA 1 TypeA 2 1 NA 2 TypeB 4 NA 3