如何将数据格式化为箱形图

时间:2018-01-31 11:46:50

标签: r plot formatting boxplot

我正在尝试对这个数据集进行盒式绘图,它是许多非常相似的人中唯一一个没有箱图的人。我设置了数据a <- as.numeric。我得到的错误消息是:Error in x[!xna] : object of type 'builtin' is not subsettable In addition: Warning messages: 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'builtin' 2: In is.na(x) : is.na() applied to non-(list or vector) of type 'builtin'

当我输入

时,数据看起来像这样
summary(a) 
#> Frontal        L45         R45        L22.5   
#> 40.0   : 2   0.0    :4   0.0    :9   na     : 4  
#> 90.0   : 2   15.0   :3   na     :3   0.0    : 2  
#> 0.0    : 1   na     :3   11.5   :1   13.2   : 1  
#> 10.0   : 1   1.7    :1   13.4   :1   14.5   : 1  
#> 10.2   : 1   15.9   :1   15.0   :1   15.0   : 1  
#> 15.0   : 1   16.5   :1   17.3   :1   15.3   : 1  
#> (Other):12   (Other):7   (Other):4   (Other):10  
#>
#> R22.5   
#> 0.0    : 4  
#> 90.0   : 2  
#> 11.7   : 1  
#> 15.0   : 1  
#> 16.0   : 1  
#> 18.9   : 1  
#> (Other):10  

并且在表格版本

中是这样的
Frontal
15
58.2
3.8
9.2
23.9
0
na
22.1
46.6
5.3
40
10
32
32.5
90
89.2
72.6
40
10.2
90

L45
17
15
8.7
1.7
5
3
na
3.3
16.5
15.9
0
0
na
15
15
3.1
7.4
0
na
0

R45
11.5
23.7
0
0
0
0
na
0
0
25.5
0
0
0
2.4
15
13.4
17.3
na
5.2
na

L22.5
19.9
15.3
0
45.1
0
20.8
na
14.5
24.4
15
na
74.4
29.3
6.8
8.8
na
13.2
na
40
19.5

R22.5
40
90
57.1
11.7
2.9
0
0
na
0
36.9
80.2
15
0
90
30.3
47.7
57.6
18.9
16
24.3

任何疑难解答都将非常感谢。 最好, 利亚

1 个答案:

答案 0 :(得分:2)

帮助您将来提出更好的问题。请保证我们阅读上面jogo链接的the article。如果您提供a complete minimal reproducible example来提出问题,我们更有可能帮助您。我们可以使用的东西,用来向您展示如何回答您的问题。

以下是我制作的一些数据,但很可能与您的情况不一样,因为我不得不猜测它的结构,

a = data.frame(Frontal = c(4L, 13L, 7L, 16L, 6L, 1L, 18L, 5L, 11L, 12L, 10L, 2L, 8L, 
                9L, 17L, 15L, 14L, 10L, 3L, 17L), L45 = c(6L, 3L, 12L, 2L, 10L, 7L, 13L, 
                9L, 5L, 4L, 1L, 1L, 13L, 3L, 3L, 8L, 11L, 1L, 13L, 1L), R45 = c(2L, 7L, 
                1L, 1L, 1L, 1L, 10L, 1L, 1L, 8L, 1L, 1L, 1L, 6L, 4L, 3L, 5L, 10L, 9L, 
                10L), L22.5 = c(7L, 5L, 1L, 12L, 1L, 8L, 16L, 3L, 9L, 4L, 16L, 14L, 10L, 
                13L, 15L, 16L, 2L, 16L, 11L, 6L), R22.5 = c(10L, 15L, 12L, 2L, 6L, 1L, 1L, 
                16L, 1L, 9L, 14L, 3L, 1L, 15L, 8L, 11L, 13L, 5L, 4L, 7L))

# install.packages(c("tidyverse"), dependencies = TRUE)
library(tidyverse)

我怀疑您的数据存储为因素,尽管您进行了as.numeric()调用。使用数据summary()

查看as.factor的此输出
a %>% mutate_all(as.factor) %>% summary() 
#>     Frontal        L45         R45        L22.5        R22.5   
#>  10     : 2   1      :4   1      :9   16     : 4   1      : 4  
#>  17     : 2   3      :3   10     :3   1      : 2   15     : 2  
#>  1      : 1   13     :3   2      :1   2      : 1   2      : 1  
#>  2      : 1   2      :1   3      :1   3      : 1   3      : 1  
#>  3      : 1   4      :1   4      :1   4      : 1   4      : 1  
#>  4      : 1   5      :1   5      :1   5      : 1   5      : 1  
#>  (Other):12   (Other):7   (Other):4   (Other):10   (Other):10  

你可以将它与我的数据上使用summary()时的外观(我知道它是数字)进行比较,

a %>%  summary() 
#>     Frontal           L45             R45            L22.5           R22.5      
#>  Min.   : 1.00   Min.   : 1.00   Min.   : 1.00   Min.   : 1.00   Min.   : 1.00  
#>  1st Qu.: 5.75   1st Qu.: 2.75   1st Qu.: 1.00   1st Qu.: 4.75   1st Qu.: 2.75  
#>  Median :10.00   Median : 5.50   Median : 2.50   Median : 9.50   Median : 7.50  
#>  Mean   : 9.90   Mean   : 6.30   Mean   : 4.15   Mean   : 9.25   Mean   : 7.70  
#>  3rd Qu.:14.25   3rd Qu.:10.25   3rd Qu.: 7.25   3rd Qu.:14.25   3rd Qu.:12.25  
#>  Max.   :18.00   Max.   :13.00   Max.   :10.00   Max.   :16.00   Max.   :16.00  

如果你想让人们一瞥你的数据,你可以做这样的事情,

a %>% as_tibble() %>% print(n = 7)
#> # A tibble: 20 x 5
#>   Frontal   L45   R45 L22.5 R22.5
#>     <int> <int> <int> <int> <int>
#> 1       4     6     2     7    10
#> 2      13     3     7     5    15
#> 3       7    12     1     1    12
#> 4      16     2     1    12     2
#> 5       6    10     1     1     6
#> 6       1     7     1     8     1
#> 7      18    13    10    16     1
#> # ... with 13 more rows

上述输出还显示了如何存储a中的各个向量。这里它们都存储为整数int。您还可以使用软件包中的实际glimpse()

a %>% as_tibble() %>% glimpse()
#> Observations: 20
#> Variables: 5
#> $ Frontal <int> 4, 13, 7, 16, 6, 1, 18, 5, 11, 12, ... 
#> $ L45     <int> 6, 3, 12, 2, 10, 7, 13, 9, 5, 4, 1, ...
#> $ R45     <int> 2, 7, 1, 1, 1, 1, 10, 1, 1, 8, 1, 1...
#> $ L22.5   <int> 7, 5, 1, 12, 1, 8, 16, 3, 9, 4, 16, ...
#> $ R22.5   <int> 10, 15, 12, 2, 6, 1, 1, 16, 1, 9, ...

来自str()实际上可能更好,

str(a)
#> 'data.frame':    20 obs. of  5 variables:
#>  $ Frontal: int  4 13 7 16 6 1 18 5 11 12 ...
#>  $ L45    : int  6 3 12 2 10 7 13 9 5 4 ...
#>  $ R45    : int  2 7 1 1 1 1 10 1 1 8 ...
#>  $ L22.5  : int  7 5 1 12 1 8 16 3 9 4 ...
#>  $ R22.5  : int  10 15 12 2 6 1 1 16 1 9 ...

所有三个输出选项都显示数据(我生成)中的向量是整数int,即它们是数字。您应该调查数据结构并确保其数字。如果没有,您可以使用a %>% mutate_all(as.numeric)到达那里。

够了。这是a上的一个框图选项,但我不知道这是否是您要找的,

a %>% gather()  %>% ggplot(aes(key, value))  + geom_boxplot()

sigh-sight

希望详细说明gather()调用以显示其工作原理,

a %>% gather(key = "Type: L, R, or Frontal", value = "int value") %>% 
        ggplot(aes(`Type: L, R, or Frontal`, `int value`)) + 
        geom_boxplot(fill = "white", colour = "#3366FF") + 
        geom_jitter(width = .2, colour = "#3366FF", alpha = 0.4)

get a life