基于两列的计数/频率

时间:2013-11-07 01:42:59

标签: r

我有一张看起来像这样的表

ID Length OHR
A  23     .34
B  45     .23
C  89     .24

我想处理这个以生成另一个表,其中单元格包含长度和给定范围内的值的计数以及OHR(即例如长度为10的所有值,2具有OHR)值介于0和0.1之间,依此类推......)

Length/OHR 0-0.1 0.1-0.2 0.2-0.3
0-10        2       3       4
11-20       3       3       4
20-30       1       7       8

如果是一列,我可以使用cut来获取计数,但在这里我需要根据两列找到计数。我可以在其他编程语言中使用条件语句的组合来实现这一点,但它会使代码看起来很混乱甚至更慢。鉴于R旨在操纵这些数据,我认为在R中可能有一种优雅的方式来实现这一点。所以,我想知道如何解决这个问题?

任何帮助将不胜感激。

RAM中。

1 个答案:

答案 0 :(得分:0)

创建一个模仿数据的虚拟数据框:

set.seed(123)
df <- data.frame(Length = floor(runif(10,0,100)), OHR = runif(10))
head(df)
#  Length       OHR
#1     28 0.9568333
#2     78 0.4533342
#3     40 0.6775706
#4     88 0.5726334
#5     94 0.1029247
#6      4 0.8998250

使用cut制作分组类(根据需要调整可选参数breaks

df$Length.cut <- cut(df$Length, breaks = 10*(0:10))
df$OHR.cut <- cut(df$OHR, breaks = (0:10)/10)

然后使用table( , )根据需要创建2D列联表:

table(df$Length.cut, df$OHR.cut)

当然,额外列的分配只是有益的(看看cut正在做什么),你可以做到

table(cut(df$Length, breaks = 10*(0:10)), cut(df$OHR, breaks = (0:10)/10))

没有中间步骤。