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

时间:2017-08-15 12:40:25

标签: r dataframe quantile which

我对R很新,很抱歉,如果这是一个奇怪的问题。

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

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

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

which(df$b == p)

但由于某种原因,它只是输出

integer(0)

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

我已尝试使用as.numericp[[1]]as.double。结果没有任何改变。 任何帮助都理解为什么会发生这种情况,以及是否有另一种方法可以解决这个问题。

编辑:为了澄清,确切地存在第90百分位的条目,并且使用由分位数函数返回的硬编码值将返回这些。当我们使用分位数的输出时,问题出现在哪个函数中。

1 个答案:

答案 0 :(得分:3)

'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]