【问题标题】:How to take frequencies of different ranges using R?如何使用 R 获取不同范围的频率?
【发布时间】:2013-03-06 12:10:04
【问题描述】:

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

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

【问题讨论】:

  • 范围有点奇怪
  • 你能澄清@LucianoSelzer的评论吗?
  • 我很乐意在澄清后投票。
  • 无论好问题我都会投赞成票

标签: r range frequency


【解决方案1】:

您可以使用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)

【讨论】:

  • 感谢 csgillespie....但是我得到了这个错误 cut.default(f, breaks = seq(0, 4, 2)) 中的错误:'x' 必须是数字
  • 没有您的实际数据,很难诊断出问题所在。我的例子对你有用吗?在你的情况下,我怀疑 f 里面有一个字符。
【解决方案2】:

我会为每个范围创建一个具有最小和最大速度的 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 为您提供的代码读起来比:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多