计算重量变化的次数超过百分比

时间:2017-09-30 16:00:57

标签: r

假设我们有一个包含 A date 列的表 weight 。基本上,这是10年来的每日体重数据。我们想要计算重量在任一方向上变化超过3%的次数。以下伪代码是否略微正确:

count = 0
for (i in 1:nrow(A))
  {
    weight_initial = weight[i]
    for (j in 1:nrow(A))
      {
        weight_compare = weight[j]
        if(weight_compare >= 1.03*weight_initial || weight_compare <= 0.97*weight_initial)
          {
            count ++
          }
      }
  }

2 个答案:

答案 0 :(得分:1)

最好尽可能在R中进行矢量化计算。这是一种快速而肮脏的方法(根据需要进行两倍的计算,但仍然应该很快):

weight <- rnorm(10,mean=1,sd=0.1)
wtcomp <- outer(weight,weight,"/")   
sum(abs(wtcomp[lower.tri(wtcomp)])>0.03)

此解决方案类似于您的伪代码所产生的解决方案,除了您的伪代码在当前值与过去和未来值之间进行比较 - 因此您(我认为)会产生双倍的答案。

你真的想要计算未来所有的体重增加/减少吗?例如应该权重=(1,2,2,2,2)真的算作4个体重增加事件而不只是一个?

答案 1 :(得分:0)

我不太清楚你想要的输出是什么。所以,如果你有时间序列的权重:

billId

并且您希望将每个测量值与初始测量值进行比较,以检查其变化次数超过3%:

a <- c(1,1.5,2,4,3, 3.005, 3.05, 0.5, 0.99)

但是如果你想计算每日变化的次数高于之前测量的3%,那么:

sum(abs((a-a[1])/a[1]) > 0.03)

干杯F.