带有条件变量的交叉表

时间:2020-09-09 08:14:25

标签: r

我有以下数据框:

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))

我想生成以下交叉表:

enter image description here

也许正在使用

length(which())

输入不是那么复杂,但是我不知道如何安排这样一个矩阵。 预先谢谢你。

1 个答案:

答案 0 :(得分:4)

您可以将cutbreaks一起使用,以将数据划分为存储桶,使用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