【问题标题】:Finding common breaks for multiple variables查找多个变量的常见中断
【发布时间】:2017-05-17 22:26:29
【问题描述】:

假设我有一个带有变量的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")

我想为df$s 生成breaks 并知道df$pdf$a 的哪些值对应于这些breaks

如果我这样做:

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

df$pdf$q 对应于s.breaks 的值是多少?

【问题讨论】:

    标签: r histogram


    【解决方案1】:

    您可以使用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"
    

    注意 counts 变量的元素。这与 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 
    

    【讨论】:

    • 然后线性推断 df$b 和 df$c 对于 a.breaks 的等效值是多少?
    • 我想我不完全确定你的意思。你想为 b 和 c 构建与 a 形状相同的直方图吗?还是您想使用 cat 中的中断将 b 和 c 分成组?
    • 我想找到a.breaks对应的b和c的值。例如,a=-2.5 (a.breaks[1]) 对应的 b 和 c 的值是多少。所以我认为你提到的第一个选项与我的想法很接近。
    • 对不起,我应该编辑我的帖子以添加 b 和 c 与 a 单调
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多