继ayk的评论之后,我提供了一个例子.在我看来,当你有一个data_frame,其中一个因子或字符类的列具有NA值时,如果没有删除它们或重新分类数据,就无法传播.这特定于data_frame(请注意名称中带有下划线的dplyr类),因为当我在data.frame中有NA值时,这适用于我的示例.例如,上面示例的略微修改版本:
这是数据帧
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
这给出了一个看起来像这样的data_frame
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
然后,当我们尝试整理它时,我们收到一条错误消息:
df_1 %>% spread(key=Answer, value=n) Error: All columns must be named
但是,如果我们删除NA,那么它"有效":
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
但是,删除NA可能无法获得所需的结果:即您可能希望将这些包含在整理的表中.您可以直接修改数据以将NA更改为更具描述性的值.或者,您可以将数据更改为data.frame,然后传播就可以了:
as.data.frame(df_1) %>% spread(key=Answer, value=n) Type No Yes NA 1 TypeA 2 1 NA 2 TypeB 4 NA 3