【发布时间】:2018-01-23 09:14:21
【问题描述】:
所以,我试图从数据框 df 中获取 a 列中的值,它是 b 列的第 90 个百分位。我使用以下代码获取分位数的值:
p = quantile(df$b, c(0.9))
在这之后,我想用它来获取值的行号,这样我就可以用它来获取a列中的对应值:
which(df$b == p)
但由于某种原因,它只给出了输出
integer(0)
我将变量 p 替换为实际值 1.68,它起作用了,并且仅使用 1.68 创建另一个变量也起作用,但是将它与分位数的结果一起使用永远不会给出正确的值。
我尝试过使用as.numeric、p[[1]] 和as.double。结果没有任何变化。
在理解为什么会发生这种情况以及是否有其他方法可以解决此问题时,我们将不胜感激。
编辑:澄清一下,正好在第 90 个百分位有条目,使用分位数函数返回的硬编码值将返回这些条目。当我们使用quantile的输出时,问题出现在which函数上。
【问题讨论】:
-
不,第 90 个百分位数有多个条目。如果我们不使用 quantile 函数并且只在运行该函数后声明它给出的值,它就可以正常工作。
-
百分位数不需要在数据中。最好找到小于或等于 90% 百分位数的最大值。试试
which( with(df, b==max(b[b<=p])) )。 -
尝试
which.min(abs(quantile(df$b, c(0.9))- df$b))以获得最接近的值。