我有一个数据框,“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以下的值。
也就是说,生成的列联表应该是这样的(当然,频率不同):
> 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()
命令中对值进行分组。
这可能吗?
答案 0 :(得分: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))