【问题标题】:Counting Values in R Vector计算 R 向量中的值
【发布时间】:2012-10-28 01:59:58
【问题描述】:

我有一个很大的百分比向量 (0-100),我正在尝试计算其中有多少 特定的 20% 桶 (

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 吗?怎么了?

【问题讨论】:

  • 很快,您就会想要将函数 cuttable 结合起来。
  • 为什么不能详细说明?
  • @GTyler - 因为这类问题之前已经回答过好几次了:stackoverflow.com/questions/5570293/…stackoverflow.com/questions/5746544/r-cut-by-defined-intervalS.O.不能替代研究。
  • 为什么是反对票?我不知道这是错误的间隔。我还以为是别的东西。
  • @user1717913 也许我没有时间写一个完整的答案,而是尽可能地提供帮助?而不是“谢谢!”我得到一个抱怨的评论,说我没有做更多。我不认为期望提问者表现得更好是不合理的。

标签: r vector


【解决方案1】:

我喜欢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 

【讨论】:

  • 我会使用table(cut(x, breaks=c(0,20,40,60,80,100))),但我喜欢findInterval 的更简洁的输出 - 谢谢latemail!作为旁注,GTyler,尽管您在这里不需要&amp; 运算符,&amp;&amp; 在 R 中与在其他语言中不同 - 它只需要向量中的 FIRST 对象 - 可能是你的错误的原因。我从未遇到过不首选&amp; 的情况。
  • @user1717913: &amp;&amp;if 语句中几乎总是首选。来自?"&amp;&amp;":“较长的形式适用于编程控制流,通常在‘if’子句中首选。”
  • 感谢您指出这一点——当我第一次了解到这一点时,我一定是误解了。 cond1 &amp;&amp; cond2 是否与 all(cond1 &amp; cond2) 相同? (结果和/或速度)?
  • @user1717913:不,第二个比cond1cond2 的第一个元素计算更多,而&amp;&amp; 只计算每个元素的第一个元素。
【解决方案2】:

错误计数的原因
x[5] 有效地计算不满足条件的每一次出现
mail_return[i]&gt;60 &amp;&amp; mail_return[i]&lt;=80,
即计算 > 80 的项目(如您所料),但也计算

你可以替换...

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(...)) )不需要这种速记代码(并且更有效)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2020-08-12
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多