r - 将因子水平的段打印到基础 R 中的条形图中
问题描述
我有一个带有数值变量和因子变量的数据框,如下所示:
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" )
对于所有其他级别,依此类推,如果您有多个级别,这会很乏味。所以我试过这个for
循环:
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)
}
但这不会打印任何东西(也不会引发错误)。插入均值段的最干净和最简单的代码是什么?
解决方案
由于“级别”列是factor
,用于levels
获取factor
“un1”的级别,然后遍历唯一元素的序列,获取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
推荐阅读
- postgresql - 应用联接,按日期列排序并选择其中一个列值不为空的第一行
- python - 如何获取/打印两个字典之间的差异?
- three.js - 如何将多个骨架动画合并到一个文件中
- javascript - 如何在点击时将数据属性从带有 ajax 的 html 发送到 some.php 页面?
- python - Python selenium sendkeys 元素不可交互
- java - 哪个包包含 EnableKinesisStreamingDestinationRequest
- javascript - 如何从 highcharts 中的 setInterval 函数获取 react useState 钩子的更新值?
- ruby - 为什么 Ruby 的 IO#pwrite 是线程安全的?
- sql - 选择既是经理又在经理手下工作的员工
- javascript - 如何访问嵌入模板的 DOM 元素?(角度 11)