2013-03-06 38 views
-1

我有一组数据,它指的是不同的人的...速度对我这样的数据看起来像这样 因此,它基本上是一个速度表如何使用R获取不同范围的频率?

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真的很陌生,很想用它来分析我的一些数据。

+2

范围有点奇怪 – 2013-03-06 12:13:00

+1

你能澄清@ LucianoSelzer的评论吗? – Arun 2013-03-06 12:30:02

+0

我很乐意在澄清后投票。 – Arun 2013-03-06 12:41:35

回答

3

您可以使用cuttable的组合轻松完成此操作。首先让生成100周随机数0之间& 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) 
+0

谢谢csgillespie ....但呃我得到这个错误在cut.default错误(f,breaks = seq(0,4,2)):'x'必须是数字 – 2013-03-06 12:30:29

+0

没有您的实际数据,很难诊断wha错误。我的榜样是否适合你?在你的情况下,我怀疑'f'里面有一个字符。 – csgillespie 2013-03-06 12:54:03

1

我想创建与最小和最大速度为每个范围内的data.frame:

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

然后使用plyradply用于计数频率:

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给你的代码读取b etter比:

my.summary$freq <- apply(my.summary, 1, function(x)sum(dat$Velocity > x[1] & 
                 dat$Velocity <= x[2]))