寻找多个变量的常见中断

时间:2017-01-03 18:32:00

标签: r histogram

假设我有data.frame变量:

set.seed(1)
df <- data.frame(s=rnorm(100))

然后是另外两个与第一个变量单调的变量:

df$p <- pnorm(abs(df$s),lower.tail=F)
df$q <- p.adjust(df$p,method="BH")

我想为breaks制作df$s,并知道df$pdf$a的哪些值对应于breaks

所以,如果我这样做:

s.breaks <- hist(df$s,breaks=10,plot=F)$breaks

df$p对应的df$qs.breaks的值是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用findInterval获取直方图功能创建的类别。

df$cats <- findInterval(df$s, s.breaks)

这是直方图的结构

s.hist <- hist(df$s,breaks=10,plot=F)
str(s.hist)
List of 6
 $ breaks  : num [1:11] -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 ...
 $ counts  : int [1:10] 1 3 7 14 21 20 19 9 4 2
 $ density : num [1:10] 0.02 0.06 0.14 0.28 0.42 0.4 0.38 0.18 0.08 0.04
 $ mids    : num [1:10] -2.25 -1.75 -1.25 -0.75 -0.25 0.25 0.75 1.25 1.75 2.25
 $ xname   : chr "df$s"
 $ equidist: logi TRUE
 - attr(*, "class")= chr "histogram"

请注意计数变量的元素。这与df $ cats上table的输出相同。

table(df$cats)

 1  2  3  4  5  6  7  8  9 10 
 1  3  7 14 21 20 19  9  4  2 

如果目标是使用由df $ cats构建的类别来执行计算。然后你就完成了。例如,

tapply(df$p, df["cats"], mean) 将根据您的问题计算每个直方图栏中包含的观察值的df $ b的平均值。

如果目标是为相应类别单元格中具有相同计数数量的其他变量构建类别,则可以将rankcumsumfindInterval一起使用。

df$catp <- findInterval(rank(df$p), cumsum(c(1, s.hist$counts, 1)))

您可以使用table检查细胞计数是否重新排列。

table(df$catp)

 1  2  3  4  5  6  7  8  9 10 
 1  3  7 14 21 20 19  9  4  2