答案 0 :(得分:1)
您需要使用cut
和一些制表功能。首先,一些示例数据(将来,请在您的问题中提供一些数据,以及可用的数据,而不是它的图像,因为如果我可以避免,我通常不想转录数字)
set.seed(2)
n <- 100
x <- data.frame(age = sample(4:8, size=n, replace=TRUE),
size = sample(3:14, size=n, replace=TRUE))
head(x,n=10)
# age size
# 1 4 5
# 2 7 8
# 3 6 14
# 4 4 12
# 5 8 6
# 6 8 10
# 7 4 13
# 8 8 8
# 9 6 4
# 10 6 4
现在使用cut
,根据已分配的&#34;中断值&#34;:
agebins <- c(3,5,7,9)
sizebins <- c(3,6,9,12,15)
cut(head(x$age), agebins)
# [1] (3,5] (5,7] (5,7] (3,5] (7,9] (7,9]
# Levels: (3,5] (5,7] (7,9]
cut(head(x$size), sizebins)
# [1] (3,6] (6,9] (12,15] (9,12] (3,6] (9,12]
# Levels: (3,6] (6,9] (9,12] (12,15]
默认情况下,它会生成factor
,但您可以选择(如果您不需要(5,7]
的视觉效果,表明&#34;大于5,小于或等于7&#34;。)
好的,让我们将这些垃圾箱捕获到data.frame中并制成表格。
x$agebin <- cut(x$age, agebins, right = FALSE)
x$sizebin <- cut(x$size, sizebins, right=FALSE)
head(x)
# age size agebin sizebin
# 1 4 5 [3,5) [3,6)
# 2 7 8 [7,9) [6,9)
# 3 6 14 [5,7) [12,15)
# 4 4 12 [3,5) [12,15)
# 5 8 6 [7,9) [6,9)
# 6 8 10 [7,9) [9,12)
有两个基本功能列表,table
和xtabs
:
table(x$agebin, x$sizebin)
#
# [3,6) [6,9) [9,12) [12,15)
# [3,5) 6 7 5 6
# [5,7) 13 7 6 12
# [7,9) 11 10 7 10
with(x, table(agebin, sizebin))
# sizebin
# agebin [3,6) [6,9) [9,12) [12,15)
# [3,5) 6 7 5 6
# [5,7) 13 7 6 12
# [7,9) 11 10 7 10
我使用了with(x, ...)
符号,这样可以保留轴名称。不过我更喜欢第二个功能:
xtabs(~ agebin + sizebin, data=x)
# sizebin
# agebin [3,6) [6,9) [9,12) [12,15)
# [3,5) 6 7 5 6
# [5,7) 13 7 6 12
# [7,9) 11 10 7 10
如果你想要边际总和,那也不难:
xtb <- xtabs(~ agebin + sizebin, data=x)
xtb <- cbind(xtb, RowTotal = rowSums(xtb))
xtb <- rbind(xtb, ColTotal = colSums(xtb))
xtb
# [3,6) [6,9) [9,12) [12,15) RowTotal
# [3,5) 6 7 5 6 24
# [5,7) 13 7 6 12 38
# [7,9) 11 10 7 10 38
# ColTotal 30 24 18 28 100