当前位置:  开发笔记 > 编程语言 > 正文

如何在tidyr中正确使用传播功能

如何解决《如何在tidyr中正确使用传播功能》经验,为你挑选了1个好方法。



1> 小智..:

继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

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有