小编mat*_*tek的帖子

ggplot2:为每个方面添加具有总体中位数的hline

我想绘制一个水平小平面线与该方面的总体中位数.

我尝试了这种方法,但没有使用以下代码创建虚拟汇总表:

require(ggplot2)

dt = data.frame(gr = rep(1:2, each = 500),
            id = rep(1:5, 2, each = 100), 
            y = c(rnorm(500, mean = 0, sd = 1), rnorm(500, mean = 1, sd = 2)))


ggplot(dt, aes(x = as.factor(id), y = y)) +
  geom_boxplot() +
  facet_wrap(~ gr) +
  geom_hline(aes(yintercept = median(y), group = gr), colour = 'red')
Run Code Online (Sandbox Code Playgroud)

但是,为每个方面分别绘制整行数据集的中位数而不是中位数: 在此输入图像描述

过去,建议使用解决方案

  geom_line(stat = "hline", yintercept = "median")
Run Code Online (Sandbox Code Playgroud)

但它已经停止(产生错误"没有名为StatHline的统计数据").

另一个解决方案

 geom_errorbar(aes(ymax=..y.., ymin=..y.., y = mean))
Run Code Online (Sandbox Code Playgroud)

但它产生了

Error in data.frame(y = function …
Run Code Online (Sandbox Code Playgroud)

r facet median ggplot2

10
推荐指数
2
解决办法
6423
查看次数

data.table:lapply一个具有多列输出的函数

我正在使用smean.cl.normalHmisc包中的一个函数,该函数返回一个包含3个值的向量:均值和低位和高位CI.当我在data.table2组使用它时,我获得2列和6行.有没有办法获得结果,两行对应2组,每个函数的输出分别列,即均值和CI?

require(Hmisc)
require(data.table)

dt = data.table(x = rnorm(100),
                gr = rep(c('A', 'B'), each = 50))

dt[, lapply(.SD, smean.cl.normal), by = gr, .SDcols = "x"]
Run Code Online (Sandbox Code Playgroud)

输出:

   gr           x
1:  A -0.07916335
2:  A -0.33656667
3:  A  0.17823998
4:  B -0.02745333
5:  B -0.32950607
6:  B  0.27459941
Run Code Online (Sandbox Code Playgroud)

所需的输出:

   gr        Mean         Lower         Upper
1:  A -0.07916335   -0.33656667    0.17823998
2:  B -0.02745333   -0.32950607    0.27459941
Run Code Online (Sandbox Code Playgroud)

r hmisc data.table

5
推荐指数
1
解决办法
657
查看次数

在Manipulate中绘制NDSolve

我有以下工作Mathematica代码:

ODENInit[n_, xIni_] := 
    Join[{x[1][0] == xIni}, Table[x[i][0] == 0, {i, 2, n}]]
ODEN[n_] := 
    Join[{x[1]'[t] == k1 - k2 x[1][t]}, 
    Table[x[i]'[t] == k1 x[i - 1][t] - k2 x[i][t], {i, 2, n}]]
ODENVars[n_] := Table[x[i][t], {i, 1, n}];

Manipulate[
    Module[{sol}, 
        sol = NDSolve[
            Join[ODEN[10], ODENInit[10, 0]] /. {k1 -> mk1, k2 -> mk2}, 
                 ODENVars[10], {t, 0, 10}];
        Plot[Evaluate@Table[x[i][t] /. sol, {i, 1, 10}], {t, 0, 10}]], 
    {{mk1, 1}, 0.1, 10, .1}, {{mk2, 1}, 0.1, 10, .1}]
Run Code Online (Sandbox Code Playgroud)

有没有办法重写Manipulate部分,这样我就不需要将k1和k2参数重新分配给虚拟参数,这里是mk1和mk2?感谢任何提前提示.

wolfram-mathematica

4
推荐指数
1
解决办法
1017
查看次数

data.table:按索引的子集

在下面的数据表中,我想id从列中选择具有唯一且最小值的行pos2

dt = data.table(id = c(1,2,2,3,3,3),
            pos1 = c(0.1, 0.2, 0.2, 0.3, 0.3, 0.3),
            pos2 = c(0.1, 0.25, 0.21, 0.34, 0.31, 0.32))

   id pos1 pos2
1:  1  0.1 0.10
2:  2  0.2 0.25
3:  2  0.2 0.21
4:  3  0.3 0.34
5:  3  0.3 0.31
6:  3  0.3 0.32
Run Code Online (Sandbox Code Playgroud)

我现在做的方式是创建一个中间表:

dt.red = dt[, .(pos2 = first(sort(pos2))), by = id]

   id pos2
1:  1 0.10
2:  2 0.21
3:  3 0.31
Run Code Online (Sandbox Code Playgroud)

然后,我合并以获得所需的最终结果

merge(dt, dt.red)

   id …
Run Code Online (Sandbox Code Playgroud)

r data.table

2
推荐指数
2
解决办法
82
查看次数

标签 统计

r ×3

data.table ×2

facet ×1

ggplot2 ×1

hmisc ×1

median ×1

wolfram-mathematica ×1