1

我有一组数据,它指的是不同人的速度......所以我的数据看起来像这样所以它基本上只是一个速度列表

Velocity(m/s)
1.2
1.4
2.3
1.6
4.5
3.5
1.7
4.5
3.7

我想使用 R 来获得不同的范围和该特定范围的频率......例如,我想要一个类似于下面的输出

Velocity(m/s)     Frequency
1.0 - 3.0            7
1.5- 2.0             4

...

所以我想得到一个不同范围的频率列。我对 R 真的很陌生,真的很想用它来分析我的一些数据。

4

2 回答 2

4

cut您可以使用和的组合轻松完成此操作table。首先让我们生成 0 到 100 之间的 100 个随机数:

r = runif(100, 0, 100)

接下来是我们希望出现中断的位置。在此示例中,我们希望它们位于:0、10、...、100:

cut(r, breaks=seq(0, 100, 10))

然后使用table命令计算频率:

table(cut(r, breaks=seq(0, 100, 10)))

你似乎想要重叠的休息,所以我会使用该table命令两次,即

t1 = table(cut(r, breaks=seq(0, 100, 10)))
t2 = table(cut(r, breaks=seq(0, 100, 5)))

然后结合结果

c(t1, t2)
于 2013-03-06T12:12:10.293 回答
1

我将为每个范围创建一个具有最小和最大速度的 data.frame:

my.summary <- data.frame(vel.lo = c(1, 1.5), 
                         vel.hi = c(3, 2))

然后使用plyr's adply计算频率:

library(plyr)
adply(my.summary, 1, transform, freq = sum(dat$Velocity  > vel.lo &
                                           dat$Velocity <= vel.hi))
#   vel.lo vel.hi freq
# 1    1.0      3    5
# 2    1.5      2    2

注意:您也可以只使用基本包apply,但由于它会删除列名,我发现adply您的代码读起来比:

my.summary$freq <- apply(my.summary, 1, function(x)sum(dat$Velocity  > x[1] &
                                                       dat$Velocity <= x[2]))
于 2013-03-06T12:22:18.527 回答