从分组值创建意外事件 table

Creating a contingency table from grouped values

我有一个数据框,"dat",有一个因子,"letters"(它有三个级别,"A","B",和"C" ),以及一个数值向量,"numbers"(值从 1 到 80):

dat <- data.frame(letters = sample(LETTERS[1:3], 15, replace = TRUE),
                  numbers = sample(80, 15, replace = TRUE))

我想创建一个应急事件table,其中 "B" 和 "C" 水平被分组,值被分组为高于 40.5 和低于 40.5 的值。

也就是说,由此产​​生的意外事件table应该是这样的(当然频率不同):

> table(...)
       numbers
letters 1:40 41:80
      A    2     3
  B + C    4     6

我创建了 table,方法是首先在我的数据框中引入两个新列,然后从这些列创建 table:

dat$two.letters <- "A"
dat[dat$letters != "A", ]$two.letters <- "B + C"
dat$two.letters <- as.factor(dat$two.letters)
dat$two.numbers <- "1:40"
dat[dat$numbers > 40, ]$two.numbers <- "41:80"
dat$two.numbers <- as.factor(dat$two.numbers)
table(dat$two.letters, dat$two.numbers)

        1:40 41:80
  A        3     1
  B + C    6     5

但我想在不引入新列 或构建单独的数据框的情况下创建 table 。相反,我想在 table() 命令中对值进行分组。

这可能吗?

我们可以使用非常有用的 ifelse function to relabel your data points. We also use the with 函数来避免额外的输入:

with(dat, 
    table(ifelse(letters == 'A', 'A', 'B+C'), ifelse(numbers <= 40, '1:40','41:80')))

      1:40 41:80
  A      1     2
  B+C    4     8

数据(注意set.seed的用法)

set.seed(123)
dat <- data.frame(letters = sample(LETTERS[1:3], 15, replace = TRUE),
                  numbers = sample(80, 15, replace = TRUE))