我对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.numeric
,p[[1]]
和as.double
。结果没有任何改变。
任何帮助都理解为什么会发生这种情况,以及是否有另一种方法可以解决这个问题。
编辑:为了澄清,确切地存在第90百分位的条目,并且使用由分位数函数返回的硬编码值将返回这些。当我们使用分位数的输出时,问题出现在哪个函数中。
答案 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]