如何计算特定范围内的数字量

时间:2013-04-18 07:55:57

标签: r

我在计算数字方面仍有问题。

试图找到第一行[-0.5,0.5]内的数字量,以及第二行中相同范围外的数字量。

我使用abc = rnorm(100, mean=0, sd=1)。所以我总共有100个数字,但我只有35个数字在范围内,35个在范围之外,不会加起来为100个。

length(abc[abc>=-0.5 & abc<=0.5])
[1] 35

length(abc[abc<-0.5 & abc>0.5])
[1] 35

然后我尝试了:

length(which(abc>=-0.5 & abc<=0.5))
[1] 40

length(which(abc<-0.5 & abc>0.5))
[1] 26

它仍然没有加起来100.出了什么问题?

4 个答案:

答案 0 :(得分:10)

你在追求:

R> set.seed(1)
R> abc = rnorm(100, mean=0, sd=1)
R> length(abc[abc >= -0.5 & abc <= 0.5])
[1] 41
R> length(abc[abc < -0.5 | abc > 0.5])
[1] 59

出了什么问题

两件事:

  1. abc < -0.5 & abc > 0.5要求的值小于-0.5 大于0.5
  2. 但是,你确实有:abc[abc<-0.5 & abc>0.5]由于范围界定,这会有所不同。让我们分开吧:

    R> abc[abc<-0.5 & abc>0.5]
     [1] 1.5953 0.7383 0.5758 1.5118 1.1249 0.9438 <snip>
    

    现在让我们看一下abc

    R> abc
    [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  
    

    您已更改abc的值!这是因为<-是赋值运算符。您已将abc设为0.5 & abc > 0.5。为避免这种情况,请使用间距(如我的代码所示)。

答案 1 :(得分:3)

当想要在这样的半径内外找到数字时,考虑绝对值会很有帮助,然后你只需进行一次比较:

length(abc[abs(abc)<=0.5])
[1] 41
length(abc[abs(abc)>0.5])
[1] 59

或者您可以使用cuttable在一行中执行此操作:

table(cut(abs(abc),c(-Inf,0.5,Inf)))

  (-Inf,0.5] (0.5,Inf] 
       41        59 

答案 2 :(得分:2)

作为捷径,你也可以这样做:

set.seed(1)
abc <- rnorm(100, mean=0, sd=1)
sum(abc>=-0.5 & abc<=0.5)
# [1] 41
sum(abc< -0.5 | abc>0.5)
# [1] 59

这是有效的,因为sum将TRUE视为1,将FALSE视为0。

答案 3 :(得分:0)

或者通过subset

set.seed(1)
abc <- rnorm(100, mean=0, sd=1)

length(subset(abc, abc >= (-0.5) & abc <= 0.5))
[1] 41
length(subset(abc, abc < (-0.5) | abc > 0.5))
[1] 59