如何在 R 中找到一个变量属于哪个 interval/range
How to find which interval/range a variable falls under in R
我有一个数据框
> 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中找到一个基金函数(),想知道R中有没有类似的函数
具体来说,有没有办法确定变量属于哪个区间?一旦我找到那个区间,提取数据子集的方法?
目前只能想到%in%运算符,
> 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
>
现在希望有一个更简洁的答案,因为我的真实数据超过 100 万行。
尝试使用下面的代码,看看它是否会给您预期的结果:
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
如果这对您有帮助,请告诉我们。谢谢
我有一个数据框
> 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中找到一个基金函数(
具体来说,有没有办法确定变量属于哪个区间?一旦我找到那个区间,提取数据子集的方法?
目前只能想到%in%运算符,
> 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
>
现在希望有一个更简洁的答案,因为我的真实数据超过 100 万行。
尝试使用下面的代码,看看它是否会给您预期的结果:
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
如果这对您有帮助,请告诉我们。谢谢