是否可以从 dplyr 管道调用 dcast 函数?

Is it possible to call dcast function from dplyr pipelines?

是否可以在 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?如果是这样,这里的第一个参数是什么?

dcast 中的 data 参数在 %>% 中并不真正需要,因为它隐含地假定数据是从上一步传递过来的任何数据。我们可以指定 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(以及更多)和 return一个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