假设我们有一个包含 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 ++
}
}
}
答案 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.