如何找到变量在R中的下限/范围

时间:2017-08-10 08:34:45

标签: r range intervals

我有一个数据框

> data.frame(Col1=seq(0,24,by=4),x=rnorm(7),y=rnorm(7,50))
  Col1            x        y
1    0 -0.107046196 49.96748
2    4 -0.001515573 50.02819
3    8 -1.884417429 49.80308
4   12  1.692774467 50.45827
5   16 -0.907602775 51.14937
6   20  0.166186536 49.17502
7   24  0.420263825 49.56720

和变量

T = 2

并希望找到它所属的数据子集(本例中的第1行和第2行),然后计算变量x和y中的比率,即

  Col1            x        y
1    0 -0.107046196 49.96748
2    4 -0.001515573 50.02819

然后基于值t获得(t-0)/(4-0),然后使用该比率计算x和y中的位置

我在matlab(Find which interval a point B is located in Matlab)找到了一个基金函数,并想知道R中是否有类似的函数

具体来说,有没有办法确定变量属于哪个区间?一旦我找到了这个间隔,就是一种提取数据子集的方法吗?

我现在只能想到%in operator,

> t %in% df$Col1
[1] FALSE

为了更清晰,我试过了

> z=NULL
> for(i in 1:(nrow(df)-1)){
+   z[[i]]=df$Col1[i]:df$Col1[i+1]
+ }
> w=NULL
> for(i in 1:length(z)){
+   w=c(w,t %in% z[[i]])
+ }
> v=which(w==1)
> df[v:(v+1),]
  Col1        x        y
1    0 1.076101 50.17514
2    4 1.971503 47.81647
> 

现在希望可能会有更简洁的答案,因为我的真实数据是> 1M行。

1 个答案:

答案 0 :(得分:1)

尝试使用下面的代码,看看它是否会给你预期的结果:

 dataframe=data.frame(Col1=seq(0,24,by=4),x=rnorm(7),y=rnorm(7,50))
 funfun=function(x){v=findInterval(x,dataframe$Col1);c(v,v+1)}
 dataframe[funfun(2),]
   Col1        x        y
 1    0 0.831266 50.28246
 2    4 1.751892 48.78810
dataframe[funfun(10),]
   Col1          x        y
 3    8  0.2624929 48.33945
 4   12 -0.2243066 51.11304

如果有帮助,请告诉我们。谢谢