小编use*_*194的帖子

使用facet_wrap的ggplot boxplot中没有异常值

我想用ggplot绘制没有异常值的箱形图,只关注盒子和胡须

例如:

p1 <- ggplot(diamonds, aes(x=cut, y=price, fill=cut))
p1 + geom_boxplot() + facet_wrap(~clarity, scales="free")
Run Code Online (Sandbox Code Playgroud)

给出带有异常值的刻面箱图

在此输入图像描述

我可以用outlier.size = NA来抑制异常值:

p1 <- ggplot(diamonds, aes(x=cut, y=price, fill=cut))
p1 + geom_boxplot(outlier.size=NA) + facet_wrap(~clarity, scales="free")
Run Code Online (Sandbox Code Playgroud)

这使

在此输入图像描述

这里,y轴刻度与原始绘图中的相同,只是异常值不显示.我现在如何根据晶须结束修改每个面板上的"放大"比例?

我可以像这样重置ylim

ylim1 = boxplot.stats(diamonds$price)$stats[c(1, 5)]
Run Code Online (Sandbox Code Playgroud)

然后重新绘制

p1 + geom_boxplot(outlier.size=NA) 
   + facet_wrap(~clarity, scales="free") 
   +  coord_cartesian(ylim = ylim1*1.05)
Run Code Online (Sandbox Code Playgroud)

但这不适用于方面:

在此输入图像描述

有没有办法"facet_wrap"boxplots.stats功能?

编辑:

我试图动态计算箱线图统计数据,但这似乎不起作用.

give.stats <- function(x){return(boxplot.stats(x)$stats[c(1,5)])}

p1 + geom_boxplot(outlier.size=NA) + 
  facet_wrap(~clarity, scales="free") + 
  coord_cartesian(ylim = give.stats)

> Error in min(x, na.rm = na.rm) : invalid 'type' (list) of argument
Run Code Online (Sandbox Code Playgroud)

任何更多的想法将不胜感激.

r ggplot2

12
推荐指数
3
解决办法
1万
查看次数

数据框中的条件计算

我经常需要根据因子变量的条件从数据框中的现有变量计算新变量.

编辑在2分钟内获得4个答案,我意识到我已经过度简化了我的例子.请看下面.

简单的例子:

df <- data.frame(value=c(1:5),class=letters[1:5])
df
value class
1     a
2     b
3     c
4     d
5     e
Run Code Online (Sandbox Code Playgroud)

我可以使用这样的代码

df %>% 
    mutate(result=NA) %>%
    mutate(result=ifelse(class=="a",value*1,result)) %>%
    mutate(result=ifelse(class=="b",value*2,result)) %>%
    mutate(result=ifelse(class=="c",value*3,result)) %>%
    mutate(result=ifelse(class=="d",value*4,result)) %>%
    mutate(result=ifelse(class=="e",value*5,result))
Run Code Online (Sandbox Code Playgroud)

对我的变量执行条件计算,得到

value class result
 1     a      1
 2     b      4
 3     c      9
 4     d     16
 5     e     25
Run Code Online (Sandbox Code Playgroud)

实际上,类的数量更大,计算更复杂,但是,我更喜欢更清洁的东西,就像这样

df %>%
mutate(results=switch(levels(class),
                    "a"=value*1,
                    "b"=value*2,
                    "c"=value*3,
                    "d"=value*4,
                    "e"=value*5))
Run Code Online (Sandbox Code Playgroud)

这显然不起作用

Error in switch(levels(1:5), a = 1:5 * 1, b = 1:5 * 2, c = 1:5 * …
Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
1
解决办法
4206
查看次数

在存在 NA 的情况下否定过滤条件会产生反直觉的结果

我偶然发现了dplyr::filter大型数据帧上的复杂语句的行为,这基本上可以归结为NA值的处理:

df <- tibble(a = c(rep(1,3), 
               rep(NA, 3)))

A tibble: 6 x 1
      a
  <dbl>
1     1
2     1
3     1
4    NA
5    NA
6    NA
Run Code Online (Sandbox Code Playgroud)

过滤等于 1 的行可得到预期结果:

df %>% filter(a == 1)

A tibble: 3 x 1
      a
  <dbl>
1     1
2     1
3     1
Run Code Online (Sandbox Code Playgroud)

过滤不等于 1 的行,我希望返回 df 的剩余 3 行,但事实并非如此:

df %>% filter(!a == 1)

A tibble: 0 x 1
 ... with 1 variables: a <dbl>
Run Code Online (Sandbox Code Playgroud)

因此,虽然在第一种情况下NA被解释为不等于 1,但在第二种情况下,它被解释为等于 1。我在这里缺少逻辑吗? …

r dplyr

3
推荐指数
1
解决办法
188
查看次数

标签 统计

r ×3

dplyr ×2

ggplot2 ×1