我有一个数据框
> 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行。
答案 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
如果有帮助,请告诉我们。谢谢