是否使用带有dplyr管道语法的base中的table()函数?

是否使用带有dplyr管道语法的base中的table()函数?,r,dplyr,R,Dplyr,我喜欢dplyr的语法,但我很难像使用base R table()函数一样轻松地获得列联表。table()可以,但我不知道如何将其合并到dplyr管道语法中 谢谢你的帮助 下面是一些示例数据,它们具有我试图获取的输出 df <- tibble(id=c(rep("A",100),rep("B",100),rep("C",100)), val=c(rnorm(300,mean=500,sd=100))) %>% mutate(val_bin=cut(v

我喜欢dplyr的语法,但我很难像使用base R table()函数一样轻松地获得列联表。table()可以,但我不知道如何将其合并到dplyr管道语法中

谢谢你的帮助

下面是一些示例数据,它们具有我试图获取的输出

df <- tibble(id=c(rep("A",100),rep("B",100),rep("C",100)),
               val=c(rnorm(300,mean=500,sd=100))) %>%
  mutate(val_bin=cut(val,breaks=5))

table(df$id,df$val_bin)

我们可以
选择感兴趣的列并应用

library(dplyr)
df %>% 
    select(id, val_bin) %>%
    table

或者另一个选项是在
{}

df %>%
    {table(.$id, .$val_bin)}

tidyverse
中,要获得所需的输出,它要复杂一些

library(dplyr)
library(tidyr)
df %>%
   count(id, val_bin) %>%
   pivot_wider(names_from = val_bin, values_from = n, values_fill = list(n = 0)) %>%
   column_to_rownames('id')
#   (214,338] (338,461] (461,584] (584,707] (707,831]
#A         5        30        44        20         1
#B         9        30        34        27         0
#C         8        28        43        20         1

一个选项是将
一起使用:

df%>%
带(,表格(id,val_bin))
#瓦鲁宾
#身份证号码(228327)(327426)(426525)(525624)(624723)
#A 4 19 39 22 16
#B 5 15 41 32 7
#C 5 14 44 25 12
从技术上讲,不需要

df%>%
带(表(id,val_-bin))

但我发现,在容易混淆数据去向的情况下(在
表中
)(提示:这几乎总是第一个函数,
在一起。)

谢谢!我最终使用了spread()而不是pivot\u wide(),但得到了相同的结果。
library(dplyr)
library(tidyr)
df %>%
   count(id, val_bin) %>%
   pivot_wider(names_from = val_bin, values_from = n, values_fill = list(n = 0)) %>%
   column_to_rownames('id')
#   (214,338] (338,461] (461,584] (584,707] (707,831]
#A         5        30        44        20         1
#B         9        30        34        27         0
#C         8        28        43        20         1