是否使用带有dplyr管道语法的base中的table()函数?
我喜欢dplyr的语法,但我很难像使用base R table()函数一样轻松地获得列联表。table()可以,但我不知道如何将其合并到dplyr管道语法中 谢谢你的帮助 下面是一些示例数据,它们具有我试图获取的输出是否使用带有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
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