将因子水平的段打印到 base R 中的带状图中
Print segments for factor levels into stripchart in base 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
loop:
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)
}
但这不会打印任何内容(也不会引发错误)。插入均值段的最干净、最简单的代码是什么?
由于 'levels' 列是 factor
,使用 levels
得到 factor
'un1' 的水平,然后遍历唯一序列元素,获取 '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
我有一个带有数值变量和因子变量的数据框,如下所示:
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
loop:
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)
}
但这不会打印任何内容(也不会引发错误)。插入均值段的最干净、最简单的代码是什么?
由于 'levels' 列是 factor
,使用 levels
得到 factor
'un1' 的水平,然后遍历唯一序列元素,获取 '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