【问题标题】:R: Using which() with output of quantile()?R:使用 which() 和 quantile() 的输出?
【发布时间】: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.numericp[[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)) 以获得最接近的值。

标签: r dataframe quantile


【解决方案1】:

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

您的数据:

df <- data.frame(b = runif(50))

第 90 个百分位

p = quantile(df$b, c(0.9))

最接近第 90 个百分位的索引:

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

使用索引从数据框中获取值:

df$b[index]

【讨论】:

  • 请注意,您应该能够使用更紧凑的which.min(),如index &lt;- which.min(abs(df$b-p))
猜你喜欢
  • 2016-09-07
  • 2013-03-07
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2019-02-06
  • 1970-01-01
相关资源
最近更新 更多