【发布时间】:2017-11-29 12:12:03
【问题描述】:
我正在尝试通过在 r 中使用 for 和嵌套 if 来解决以下问题: 我的可用价格数据是: 测试2
test2 <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 399, 0, 0, 399, 0, 0, 0, 0, 399, 0, 0, 0, 0, 429, 0, 429,
0, 0, 0, 499, 0, 429, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0)
问题: 用第一次出现的值替换第一次出现价格之前的 0,然后用第一次出现的值替换第一次出现之后的 0,直到第二次出现价格,依此类推。价格最后一次出现后的 0 应替换为最后一次出现的值。
我使用了以下代码:
priceposition2 <- which(test2>0)
for(i in 1:length(priceposition2)){
for(m in 1:length(test2)){
if (m <= priceposition2[1]){
test2[m] <- test2[priceposition2[1]]
} else if (m > priceposition2[1]){
if (m> priceposition2[i] && m < priceposition2[i+1]){
test2[m] <- test2[priceposition2[i]]
}else if(m> priceposition2[length(priceposition2)]){
test2[m] <- test2[priceposition2[length(priceposition2)]]
}
}
m=m+1
}
i=i+1
}
在此之后我得到以下结果:
[1] 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399
399 399 399 399 399
[24] 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399
399 399 399 399 399
[47] 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399 399
399 399 399 399 399 399
[70] 399 399 399 399 399 399 399 399 429 429 429 429 429 429 499 499 429 429
429 429 429 429 529
[93] 529 529 529 529 529 529 529 529 529 529 529 529 529 529 529 529 529 529
529 529 529 529 529
[116] 529 529 529 529 529 529 529 529 529 529 529 529 529 529
这正是我想要的。 问题是我使用上面的代码得到错误:
Error in if (m > priceposition2[i] && m < priceposition2[i + 1]) { :
missing value where TRUE/FALSE needed
我做错了什么吗? 对于上述问题,还有其他使用 apply 系列的替代方法吗?
【问题讨论】:
-
请使用 dput() 共享您的数据
标签: r for-loop if-statement vector apply