我有一个示例数据框
df <- data.frame(a = c(sample(LETTERS[1:5], 10, TRUE), "Z", "Z"),
b = c(rnorm(10), NA, NA))
我正在尝试做一些简单的绘图并添加一些颜色。我可以很容易地知道在我绘制之前会有多少a
个值:
library(randomcoloR)
df %>%
filter(!is.na(b)) %>%
ggplot() +
geom_bar(aes(x = a, y = b),
fill = randomColor(5),
stat = "summary",
fun.y = "mean")
但是,如果我不知道会有多少a
值呢?如何在a
语句中获取1}}内联内的唯一geom_xxx
内联的数量?
使用n_distinct(a)
不起作用并提供错误
df %>%
filter(!is.na(b)) %>%
ggplot() +
geom_bar(aes(x = a, y = b),
fill = randomColor(n_distinct(a)),
stat = "summary",
fun.y = "mean")
n_distinct_multi(list(...),na.rm)中的错误:找不到对象'a'
使用uniqueN()
中的data.table
不起作用并提供错误:
library(data.table)
df %>%
filter(!is.na(b)) %>%
ggplot() +
geom_bar(aes(x = a, y = b),
fill = randomColor(uniqueN(a)),
stat = "summary",
fun.y = "mean")
uniqueN(a)中的错误:找不到对象'a'
使用unique(a) %>% length()
也不起作用,并在上面提供相同的错误。
我可以在a
语句中找到内联的唯一geom_xxx
值的内联数吗?我觉得我在这里错过了一些明显的东西。
答案 0 :(得分:0)
您可以将数据框传输到匿名函数中:
df %>%
filter(!is.na(b)) %>%
(function(df) ({
ggplot(df) +
geom_bar(aes(x = a, y = b),
fill = randomColor(length(unique(df$a))),
stat = "summary",
fun.y = "mean")
}))