R:将which()与分位数()的输出一起使用?

R:将which()与分位数()的输出一起使用?,r,dataframe,quantile,R,Dataframe,Quantile,所以,我试图从数据帧df中得到a列中的值,这是b列的第90个百分位。我使用以下代码获得分位数的值: p = quantile(df$b, c(0.9)) 在此之后,我想用它来获取值的行号,这样我就可以用它来获取a列中的相应值: which(df$b == p) 但出于某种原因,它只给出了 integer(0) 我用实际值(1.68)替换变量p,它起作用了,创建另一个只有1.68的变量也起作用了,但是用它和分位数的结果一起使用永远不会给出正确的值 我试过使用as.numeric,使用p[[1

所以,我试图从数据帧df中得到a列中的值,这是b列的第90个百分位。我使用以下代码获得分位数的值:

p = quantile(df$b, c(0.9))
在此之后,我想用它来获取值的行号,这样我就可以用它来获取a列中的相应值:

which(df$b == p)
但出于某种原因,它只给出了

integer(0)
我用实际值(1.68)替换变量p,它起作用了,创建另一个只有1.68的变量也起作用了,但是用它和分位数的结果一起使用永远不会给出正确的值

我试过使用
as.numeric
,使用
p[[1]]
as.double
。结果没有任何变化。 在理解为什么会发生这种情况以及是否有其他方法可以做到这一点时,任何帮助都是值得感激的


编辑:为了澄清,在第90个百分位上有条目,使用分位数函数返回的硬编码值将返回这些条目。当我们使用分位数的输出时,问题出现在which函数中。

“分位数”将为您提供数据的90%分位数,该分位数可能是数据中的值,也可能不是数据中的值,因此,如果您想要最接近90%分位数的值,您需要以稍微不同的方式进行匹配:

您的数据:

df <- data.frame(b = runif(50))
该指数最接近第90百分位:

index <- which(abs(df$b - p) == (min(abs(df$b - p), na.rm = TRUE)))
index

“分位数”将为您提供数据的90%分位数,该分位数可能是数据中的一个值,也可能不是数据中的一个值,因此,如果您想要最接近90%分位数的值,您需要以稍微不同的方式进行匹配:

您的数据:

df <- data.frame(b = runif(50))
该指数最接近第90百分位:

index <- which(abs(df$b - p) == (min(abs(df$b - p), na.rm = TRUE)))
index

不,第90百分位有几个条目。如果我们不使用分位数函数,只需在运行该函数后声明它给出的值,它就可以正常工作。最好找到小于或等于90%百分位的最大值。尝试类似于
which的方法(使用(df,b==max(b[bTry
which.min)(abs(分位数(df$b,c(0.9))-df$b))
获取最接近的值。不,第90个百分位数有几个条目。如果我们不使用分位数函数,只需在运行该函数后声明它给出的值就可以了。该百分位数不需要在数据中。最好找到小于或等于90%百分位数的最大值。试试看类似于
which(使用(df,b==max(b[bTry
which.min(abs(分位数(df$b,c(0.9))-df$b))
表示最接近的值。请注意,您应该能够像
索引那样使用更紧凑的
which.min()