【问题标题】:Print segments for factor levels into stripchart in base R将因子级别的段打印到基础 R 中的条形图中
【发布时间】:2019-11-04 18:29:30
【问题描述】:

我有一个带有数值变量和因子变量的数据框,如下所示:

set.seed(123)
df <- data.frame(
  numbers = c(rnorm(50, 3), runif(50)),
  levels = sample(LETTERS[1:5], 100, replace = T)
)

我想做的是一个条形图,它绘制df$numbers反对df$levels 并且插入代表每个级别平均值的垂直线段。

stripchart(df$numbers ~ df$levels, method = "jitter")

显然,我可以分别为每个级别插入均值行,例如:

segments(x0 = mean(df$numbers[df$levels=="A"]), y0 = 1-0.3, y1 = 1+0.3, col = "red" )

对于所有其他级别等等,如果您有多个级别,这会很乏味。所以我试过这个forloop:

for(i in seq(unique(df$levels))){
  segments(x0 = mean(df$numbers[df$levels==i]),
           y0 = i - 0.3,
           y1 = i + 0.3,
           col = "red", lty = 3, lwd = 2)
}

但这不会打印任何东西(也不会引发错误)。插入均值段的最简洁和最简单的代码是什么?

【问题讨论】:

  • 我以前试过这个;它产生一个错误:Error in i - 0.3 : non-numeric argument to binary operator

标签: r for-loop stripchart


【解决方案1】:

由于'levels'列是factor,使用levels得到factor'un1'的levels,然后遍历唯一元素序列,得到'numbers'的mean其中levels 列是创建segments 的唯一值

un1 <- levels(df$levels)
for(i in seq_along(un1)){
 segments(x0 = mean(df$numbers[df$levels==un1[i]]),
       y0 = i - 0.3,
       y1 = i + 0.3,
       col = "red", lty = 3, lwd = 2)
}

-检查mean

with(df, tapply(numbers, levels, FUN = mean))
#      A        B        C        D        E 
#1.390202 1.541655 2.086605 2.377122 1.663159 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2016-01-05
    • 2017-02-16
    相关资源
    最近更新 更多