R编程 - 统计特定数字范围内的出现次数

5

你们能帮忙获取特定范围内的“计数”吗?例如,我想知道分数在0.5到1之间、1到1.5之间、2.0到2.5之间等出现的次数。下面是一个示例数据。

  Times Scores
    0   0.6
    1.2 0.5
    1.8 1.2
    2.4 1.4
    3   1.5
    3.6 2
    4.2 0.5
    4.8 0.6
    5.4 0.4
    6   1
    6.6 1.1
    8   0.6
    9.4 1.5
    10.8    1.5
    12.2    1.3
    13.6    1.6
    15  1.4
    16.4    1.2
    17.8    1.4
    19.2    2.6
    20.6    2
    22  2.2
    23.4    2.4
    24.8    1.4
    26.2    1.2
    27.6    0.5
    29  0.8
    30.4    1.4
    31.8    1.6
    33.2    2.2
    34.6    2.5
    36  3.6
    37.4    3.78
    38.8    2.5
    40.2    3.5
    41.6    3.4
    43  3.5
    44.4    3.3
    45.8    2.1
    47.2    2.3
    48.6    0.6
    50  0.7
    51.4    0.8
    52.8    1.4
    54.2    1.5
    55.6    1.6
    57  1.5
    58.4    1.2
    59.8    1.1
    61.2    1.56
    62.6    2.02
    64  2.48
    65.4    2.94
    66.8    3.4
    68.2    2.1
    69.6    2.8
    71  3.9
    72.4    2.3
    73.8    2.4
    75.2    5.5
    76.6    4.6
    78  1.2
    79.4    1.3
    80.8    1.4
    82.2    1.8
    83.6    0.5
    85  0.2
    86.4    0.3
    87.8    0.6
    89.2    0.4
    90.6    0.5
    92  0.6
    93.4    1.06
    94.8    1.52
    96.2    1.98
    97.6    2.44
    99  2.9
    100.4   3.36
    101.8   3.82
    103.2   0.6
    104.6   0.5
    106 1.2
    107.4   1.4
    108.8   1.5
    110.2   2
    111.6   0.5
    113 0.6
    114.4   0.4
    115.8   1
    117.2   1.1
    118.6   0.6
    120 1.5
    121.4   1.5
    122.8   1.3
    124.2   1.76
    125.6   2.22
    127 2.68
    128.4   3.14
    129.8   3.6
    131.2   4.06
    132.6   4.52
    134 4.98
    135.4   5.44
    136.8   5.9
    138.2   6.36
    139.6   6.82
    141 0.6
    142.4   0.5
    143.8   1.2
    145.2   1.4
    146.6   1.5
    148 2
    149.4   0.5
    150.8   0.6
    152.2   0.4
    153.6   1
    155 1.1
    156.4   0.6
    157.8   1.5
    159.2   1.5
    160.6   1.3
    162 1.76
    163.4   2.22
    164.8   2.68
    166.2   3.5
    167.6   3.3
    169 2.1
    170.4   2.3
    171.8   0.6
    173.2   0.7
    174.6   0.8
    176 1.4
    177.4   1.5
    178.8   1.6
    180.2   1.5
    181.6   1.2
    183 1.1
    184.4   0.5
    185.8   0.6
    187.2   0.1
    188.6   0.8
    190 0.5
    191.4   0.6
    192.8   0.3
    194.2   0.5
    195.6   1.5
    197 1.8
    198.4   2
    199.8   2.2

我希望将“Times”列分成15个间隔,我可以这样做。我使用的代码如下:

Data = cut(Sampledata$Times, seq(0,200, by=15), right=FALSE)
finaldata <- by(Sampledata, Data, FUN=I)  

现在我想知道如何在每个15个bin间隔内获取不同分数范围的计数。我想要的分数范围是:0.5到1,1到1.5,2.0到2.5。

感谢大家,任何建议将不胜感激。

4个回答

4
如果我理解您的问题,这里有一个简单的解决方案: table(cut(YOURDATA, breaks = seq.int(from = 0.5, to = 2.5, by = 0.5))) 这段代码可以将YOURDATA按照0.5到2.5之间0.5的间隔分组,并计算每个组中元素的数量。

2

这里提供一种解决方案,使用by,就像你已经尝试过的那样,但我替换了身份函数为自定义函数。对于每个时间间隔,我使用cut将分数范围划分为区间,并使用tapply计算每个分数区间的长度。最后使用rbind将所有内容转换为矩阵。

do.call(rbind,by(Sampledata, Data, FUN=function(x){
  tapply(x$Scores,
         cut(x$Scores,c( 0.5,1,1.5, 2.0 ,2.5)),
          length)
}))

         (0.5,1] (1,1.5] (1.5,2] (2,2.5]
[0,15)          4       7       2      NA
[15,30)         1       5       1       2
[30,45)        NA       1       1       3
[45,60)         3       5       1       2
[60,75)        NA      NA       1       5
[75,90)         1       3       1      NA
[90,105)        2       1       2       1
[105,120)       3       4       1      NA
[120,135)      NA       3       1       1
[135,150)       1       3       1      NA
[150,165)       3       4       1       1
[165,180)       3       2       1       2
[180,195)       3       3      NA      NA

1

我不确定你想要什么,也不容易将你的数据读入R中,但是概念应该是:

假设data包含你的数字,U是你的区间向量,那么

set.seed(123);
data <- rnorm(1e3);
U <- c(0.5,1,1.5,2,2.5);
counts <- numeric(length(U)-1);
for(i in 1:length(counts)) {
    counts[i] <- length(which(data>=U[i] & data<U[i+1]));
}

counts
[1] 146  83  46  22

应该能解决问题。

0
你可以像这样定义一个布尔向量:

a<-rep(F,length(Scores))
for (j in 1:length(Scores))
{
    if(0.5<Scores[j] && 1>=Scores[j])
a[j]<-T
}

使用函数sum()来计算它为真的次数:
nb0.5to1<-sum(a)

对于其他区间也做同样的操作。如果不想每次重复定义,可以使用函数seq()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接