我有以下数据框:
set.seed(1)
df <- data.frame(
X = sample(c(0.1, 2.3, NA), 50, replace = TRUE),
Y = sample(c(0.23, 4.1, NA), 50, replace = TRUE))
我想生成以下交叉表:
也许正在使用
length(which())
输入不是那么复杂,但是我不知道如何安排这样一个矩阵。 预先谢谢你。
答案 0 :(得分:4)
您可以将cut
与breaks
一起使用,以将数据划分为存储桶,使用count
来计算每个存储桶中的数据数量,以宽格式获取数据并使用janitor::adorn_totals
添加行和列的总数。
library(dplyr)
df %>%
mutate(across(.fns = cut, breaks = c(-Inf, 0.5, 5, Inf))) %>%
count(X, Y) %>%
tidyr::pivot_wider(names_from = X, values_from = n) %>%
janitor::adorn_totals(where = c('row', 'col'))
# Y (-Inf,0.5] (0.5,5] NA Total
# (-Inf,0.5] 6 4 5 15
# (0.5,5] 7 6 5 18
# <NA> 5 9 3 17
# Total 18 19 13 50