【发布时间】:2017-11-21 22:26:54
【问题描述】:
我有一个数据框“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() 命令中的值进行分组。
这可能吗?
【问题讨论】:
-
@bouncyball 太棒了!为什么不把它作为一个答案让我接受?
-
为什么不只是
with(dat, table(letters == 'A', numbers <= 40)) -
@MichaelChirico 更加精彩!虽然我必须说我喜欢使用 bouncyball 方法标记输出的能力。有两个标注为“TRUE”和“FALSE”的维度让我有点困惑。
-
您可以随时添加标签 ;-)
-
@user8183921 发布
标签: r contingency