计算R矢量中的值

时间:2012-11-07 22:34:57

标签: r vector

我有一个很大的百分比向量(0-100),我正在计算它们中有多少 特定的20%桶(< 20,20-40,40-60,60-80,80-100)。矢量长度为129605,没有 NA值。这是我的代码:

x<-c(0,0,0,0,0)
for(i in 1: length(mail_return))
{
    if (mail_return[i]<=20)
    {
        x[1] = x[1] + 1
    }
    if (mail_return[i]>20 && mail_return[i]<=40)
    {
        x[2] = x[2] + 1
    }
    if (mail_return[i]>40 && mail_return[i]<=60)
    {
        x[3] = x[3] + 1
    }
    if (mail_return[i]>60 && mail_return[i]<=80)
    {
        x[4] = x[4] + 1
    }
    else
    {   
        x[5] = x[5] + 1
    }
}

sum(x)给我的长度为133171.不应该是向量的长度,129605?怎么了?

2 个答案:

答案 0 :(得分:10)

我喜欢findInterval这些类型的任务:

x <- c(1,2,3,20,21,22,40,41,42,60,61,62,80,81,82)
table(findInterval(x,c(0,20,40,60,80)))


1 2 3 4 5 
3 3 3 3 3 

答案 1 :(得分:2)

计数错误的原因是  x [5]有效地计算每次不满足条件的事件
mail_return[i]>60 && mail_return[i]<=80
即,计算&gt;的项目。 80(正如你所料),但也计算了&lt; = 60的新项目(超出错误!)。

你可以替换......

if (mail_return[i]>60 && mail_return[i]<=80)
{
    x[4] = x[4] + 1
}
else
{   
    x[5] = x[5] + 1
}

...通过

if (mail_return[i]>60 && mail_return[i]<=80)
{
    x[4] = x[4] + 1
}

if (mail_return[i] >80)
{   
    x[5] = x[5] + 1
}

......解决问题。

但正如在其他答案中暗示的那样,更好的习惯用语(例如table(findInterval(...)))不需要这样的长手代码(而且效率更高)。