我有这样的Df:
x y z
<dbl> <dbl> <dbl>
1 408001.9 343 0
2 407919.2 343 0
3 407839.6 343 0
4 407761.2 343 0
5 407681.7 343 0
6 407599.0 343 0
7 407511.0 343 0
8 407420.5 343 0
9 407331.0 343 0
10 407242.0 343 0
11 407152.7 343 0
12 407062.5 343 0
13 406970.7 343 0
14 406876.6 342 0
15 406777.1 342 0
16 406671.0 342 0
17 406560.9 342 0
18 406449.4 342 0
19 406339.0 342 0
20 406232.5 342 0
... ... ... ...
随着x的减少。
和
这样的矢量vec=(a1, a2, a3, a4, a5, a6, ...)
a1&lt; A2&LT; A3&LT; A4 ...
现在我想将df$x
除以vec[1]
,这将得到与df$y
相同的结果(舍入)。
但是现在,当df$z
中的值下降1到342时,我希望将df$x
中的值除以vec[2]
,然后再获取新{{1}值。
从此处结果与df$z
不同,对于df$y
,要分割的数字是全部df$y
并且不会更改
每次vec[1]
得到的值下降1时,df$z
的下一个值都应使用相应的df$z
计算,其中i是滴数+ 1到目前为止
最后,我想要一个向量vec[i]
,其中值为df$z
,其中df$x / vec[i]
取决于vec [i]
的最后一个数字。
可重复的例子:
df$z
这将为你提供一个带有一个col的df,用于vec的每个值,测试$ x除以。 现在,最后,我的向量应包含col2的值,直到col2中的值从60降到59.之后我想要col3中的值,直到col3中的值降到59到58以下。然后我想要col4中的值等等。
我怎么能用任何数据来实现这一点(比如我的上面,这个例子并不是线性的。)
我尝试了一些for和while循环,但没有一个工作。我甚至没有接近我想要的东西。
我认为我的问题是我不知道如何使条件依赖于值(在点i处的test <- data.frame(x = sort((seq(500, 600, 2)), decreasing = T)
)
vec <- seq(10, 10.9, 0.03)
for(i in 1:31){
test[i+1] <- round(test$x/vec[i])
}
的值),我想在同一操作中计算。我想计算df$z
的值,其值为df$z[i]
,目前已使用过。vec[t]
但是如果df$z
的值在某个观察值[i]下降1,则vec[t+1]
的值将从那时起用于除法。
感谢您的帮助。
答案 0 :(得分:1)
我希望我明白你在问什么。这可能就是......
test <- data.frame(x = sort((seq(500, 600, 2)), decreasing = T)
vec <- seq(10, 10.9, 0.03)
#this function determines the index of `vec` to use
xcol<-function(v){
x<-rep(NA,length(v))
x[1] <- 1
for(i in 2:length(v)){
x[i] <- x[i-1]
if(round(v[i]/vec[x[i]])<round(v[i-1]/vec[x[i]])){
x[i] <- x[i]+1
}
}
return(x)
}
test$xcol <- xcol(test$x)
test$z <- round(test$x/vec[test$xcol])
test
x xcol z
1 600 1 60
2 598 1 60
3 596 1 60
4 594 2 59
5 592 2 59
6 590 2 59
7 588 2 59
8 586 3 58
9 584 3 58
10 582 3 58
11 580 3 58
12 578 4 57
...