1

我有一个数据框“dat”,其中包含一个因子“字母”(具有三个级别,“A”、“B”和“C”)和一个数字向量“数字”(值从 1至 80):

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

我想创建一个列联表,其中对“B”和“C”级别进行分组,并将值分为高于 40.5 和低于 40.5 的值。

也就是说,生成的列联表应该如下所示(当然,频率不同):

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

我通过首先在我的数据框中引入两个新列然后从这些列中创建表来创建该表:

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()命令中的值进行分组。

那可能吗?

4

1 回答 1

2

我们可以使用非常有用的ifelse功能来重新标记您的数据点。我们还使用该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))
于 2017-06-19T16:21:19.143 回答