R:使用 which() 和 quantile() 的输出?

Alk*_*ove 2 r quantile dataframe

因此,我尝试从数据框 df 中获取 a 列中的值,即 b 列的第 90 个百分位。我使用以下代码来获取分位数的值:

p = quantile(df$b, c(0.9))
Run Code Online (Sandbox Code Playgroud)

之后,我想用它来获取该值的行号,以便我可以使用它来获取a列中的相应值:

which(df$b == p)
Run Code Online (Sandbox Code Playgroud)

但由于某种原因它只给出了输出

integer(0)
Run Code Online (Sandbox Code Playgroud)

我用实际值 1.68 替换了变量 p,它起作用了,并且创建另一个仅包含 1.68 的变量也起作用,但将它与分位数的结果一起使用永远不会给出正确的值。

我尝试过使用as.numeric、 使用p[[1]]as.double。结果没有任何改变。对于理解为什么会发生这种情况以及是否有其他方法可以解决此问题,我们将不胜感激。

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

tro*_*dal 5

'quantile' 将为您提供数据的 90% 百分位数,它可能是也可能不是数据中的值,因此如果您想要最接近 90% 百分位数的值,您将需要稍微不同地匹配它:

您的数据:

df <- data.frame(b = runif(50))
Run Code Online (Sandbox Code Playgroud)

第 90 个百分位数

p = quantile(df$b, c(0.9))
Run Code Online (Sandbox Code Playgroud)

最接近第 90 个百分位数的指数:

index <- which(abs(df$b - p) == (min(abs(df$b - p), na.rm = TRUE)))
index
Run Code Online (Sandbox Code Playgroud)

使用索引从数据帧获取值:

df$b[index]
Run Code Online (Sandbox Code Playgroud)