【问题标题】:dplyr to output class data.framedplyr 输出类 data.frame
【发布时间】:2014-04-09 15:59:20
【问题描述】:

我可以像这样用dplyr 总结一个数据框:

mtcars %>%
group_by(cyl) %>%
summarise(mean(mpg))

要将输出转换回类data.frame,我目前的方法是:

as.data.frame(mtcars %>%
group_by(cyl) %>%
summarise(mean(mpg)))

有什么方法可以让dplyr 输出一个类data.frame 而不必使用as.data.frame

【问题讨论】:

  • 将您的第一个电话包裹在str:Classes ‘tbl_df’, ‘tbl’ and 'data.frame',或is.data.frame:[1] TRUE
  • plyr 包中的 ddply 怎么样?我相信这就是它的目的
  • @Arun 我经常发现自己转换回数据框以摆脱控制台上极其烦人(至少对我而言)的打印行为(抑制列)。
  • @joran 你总是可以覆盖打印方法print.tbl_df <- print.data.frame
  • 如果你只是想通过删除组来结束链,你可以用%.% ungroup()结束链吗?

标签: r dplyr


【解决方案1】:

正如 cmets 中所指出的,您可能不需要转换它,因为它可能已经足够好,可以从数据框继承。如果这还不够好,那么它仍然使用as.data.frame,但稍微优雅一些​​:

mtcars %>%
   group_by(cyl) %>%
   summarise(mean(mpg)) %>%
   ungroup %>%
   as.data.frame()

添加我刚刚在 cmets 中读到,您想要这样做的原因是为了避免截断打印输出。在这种情况下,只需定义此选项,可能在您的 .Rprofile 文件中:

options(dplyr.print_max = Inf)

(请注意,您仍然可以达到与 print 关联的 "max.print" 选项定义的最大值,因此如果它对您来说也太低,您也需要设置该最大值。)

更新:%.% 更改为 %>% 以反映 dplyr 的变化。

【讨论】:

    【解决方案2】:

    除了上面提到的 G. Grothendieck 之外,你还可以将它转换成一个新的数据框:

    new_summary <- mtcars %>%
       group_by(cyl) %>%
       summarise(mean(mpg)) %>%
       as.data.frame()
    

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2021-06-01
      • 2015-04-22
      • 1970-01-01
      • 2016-07-11
      • 2015-03-10
      相关资源
      最近更新 更多