【问题标题】:Is it possible to call dcast function from dplyr pipelines?是否可以从 dplyr 管道调用 dcast 函数?
【发布时间】:2021-04-11 22:20:22
【问题描述】:

是否可以在 dplyr 管道中使用 dcast 功能?我应该如何定义 dcast 的第一个参数?如何先使用 dplyr 过滤数据,然后使用 reshape2 将其转换为宽格式?

set.seed(45)
df <- data.frame(
    name = rep(c("firstName", "secondName"), each=4),
    numbers = rep(1:4, 2),
    value = rnorm(8)
    )

我想这样做:

library(dplyr)
library(reshape2)

df <- df %>% 
  filter(numbers<>4) %>% 
  dcast(...)

可以在 dplyr 转换中使用 dcast 吗?如果是这样,这里的第一个参数是什么?

【问题讨论】:

    标签: r dplyr reshape reshape2


    【解决方案1】:

    dcast 中的 data 参数在 %&gt;% 中并不真正需要,因为它隐含地假定数据是从上一步传递过来的任何数据。我们可以指定formula 和 'value.var' 列

    library(dplyr)   
    df %>% 
        filter(numbers != 4) %>%
        reshape2::dcast(name ~ numbers, value.var = 'value')
    #      name          1          2          3
    #1  firstName  0.3407997 -0.7033403 -0.3795377
    #2 secondName -0.8981073 -0.3347941 -0.5013782
    

    如果我们需要指定data

    df %>% 
        filter(numbers != 4) %>%
        reshape2::dcast(., name ~ numbers, value.var = 'value')
    

    使用tidyverse,有pivot_wider(来自tidyr - 成功reshape2 函数)执行与reshape2::dcast(以及更多)类似的整形并返回tibble

    library(tidyr)
    df %>% 
        filter(numbers != 4) %>% 
        pivot_wider(names_from = numbers, values_from = value)
    # A tibble: 2 x 4
    #  name          `1`    `2`    `3`
    #  <chr>       <dbl>  <dbl>  <dbl>
    #1 firstName   0.341 -0.703 -0.380
    #2 secondName -0.898 -0.335 -0.501
    

    【讨论】:

    • 谢谢。 reshape2:: 是在 dcast 之前必须使用的短语还是只是演示?
    • @PrzemyslawRemin 我使用了命名空间,因为我已经加载了 reshape2data.table(在我的控制台中)都具有 dcast 功能。所以,如果我不指定它,就会有一个警告,因为不同包的其他功能掩盖了一个功能
    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多