将数据处理成像 bin 一样的直方图
Manipulating data into histogram like bins
我想更改我正在处理的某些特定代码的数据格式。以下是前 50 个观察结果及其格式,每个个体都有自己的一行,包括观察编号、物种、长度 (mm)、重量 (kg) 和它被捕获的网的目数(以英寸为单位) .
fish_data <- read.table(header = T,
text = "Index Species Length Weight mesh
1 SVCP 450 1.26 4
2 SVCP 584 2.24 3
3 SVCP 586 2.46 3
6 SVCP 590 2.4 3
7 SVCP 590 2.04 3
8 SVCP 594 2.62 3
9 SVCP 595 2.24 3
10 SVCP 595 2.04 3
11 SVCP 596 2.46 3
12 SVCP 603 2.6 3
13 SVCP 603 2.44 3
14 SVCP 604 2.68 3
15 SVCP 604 2.48 3
16 SVCP 606 2.06 3
17 SVCP 609 3.74 5
18 SVCP 609 2.44 3
20 SVCP 611 2.56 3
30 SVCP 618 2.52 3
31 SVCP 620 2.66 3
32 SVCP 620 2.66 3
33 SVCP 621 2.72 3
34 SVCP 625 2.8 3
36 SVCP 625 2.08 3
37 SVCP 626 2.74 3
38 SVCP 627 2.09 3
39 SVCP 627 2.82 3
40 SVCP 628 2.8 3
41 SVCP 630 2.68 3
42 SVCP 630 2.82 3
43 SVCP 637 3 3
45 SVCP 639 2.54 3
47 SVCP 640 3.01 3
49 SVCP 643 3.36 3
50 SVCP 644 6.82 4.25")
我想将格式更改为如下所示。其中第一列是网的网眼尺寸,后续列是特定长度 bin 中的观察数(例如 101-105mm、106-110mm、111-115 mm...等)。我将使用 10 毫米长的垃圾箱。
52.5 52 11 1 1 0 0 0 0
54.5 102 91 16 4 4 2 0 3
56.5 295 232 131 61 17 13 3 1
58.5 309 318 362 243 95 26 4 3
60.5 118 173 326 342 199 100 10 11
62.5 79 87 191 239 202 201 39 15
64.5 27 48 111 143 133 185 72 25
66.5 14 17 44 51 52 122 74 41
68.5 8 6 14 23 25 59 65 76
70.5 7 3 8 14 15 16 34 33
72.5 0 3 1 2 5 4 6 15
这是一种使用 tidyverse
元包中的 dplyr
和 tidyr
的方法。首先我创建一个新变量Length_bin
来分配bin,然后统计每个bin中每个网格边有多少,然后从长格式传播到宽格式。
library(tidyverse)
fish_data %>%
mutate(Length_bin = (floor(Length / 5) * 5)) %>%
count(mesh, Length_bin) %>%
spread(Length_bin, n, fill = 0)
# A tibble: 4 x 15
# mesh `450` `580` `585` `590` `595` `600` `605` `610` `615` `620` `625` `630` `635` `640`
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 3 0 1 1 3 3 4 2 1 1 3 6 2 2 2
#2 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0
#3 4.25 0 0 0 0 0 0 0 0 0 0 0 0 0 1
#4 5 0 0 0 0 0 0 1 0 0 0 0 0 0 0
我想更改我正在处理的某些特定代码的数据格式。以下是前 50 个观察结果及其格式,每个个体都有自己的一行,包括观察编号、物种、长度 (mm)、重量 (kg) 和它被捕获的网的目数(以英寸为单位) .
fish_data <- read.table(header = T,
text = "Index Species Length Weight mesh
1 SVCP 450 1.26 4
2 SVCP 584 2.24 3
3 SVCP 586 2.46 3
6 SVCP 590 2.4 3
7 SVCP 590 2.04 3
8 SVCP 594 2.62 3
9 SVCP 595 2.24 3
10 SVCP 595 2.04 3
11 SVCP 596 2.46 3
12 SVCP 603 2.6 3
13 SVCP 603 2.44 3
14 SVCP 604 2.68 3
15 SVCP 604 2.48 3
16 SVCP 606 2.06 3
17 SVCP 609 3.74 5
18 SVCP 609 2.44 3
20 SVCP 611 2.56 3
30 SVCP 618 2.52 3
31 SVCP 620 2.66 3
32 SVCP 620 2.66 3
33 SVCP 621 2.72 3
34 SVCP 625 2.8 3
36 SVCP 625 2.08 3
37 SVCP 626 2.74 3
38 SVCP 627 2.09 3
39 SVCP 627 2.82 3
40 SVCP 628 2.8 3
41 SVCP 630 2.68 3
42 SVCP 630 2.82 3
43 SVCP 637 3 3
45 SVCP 639 2.54 3
47 SVCP 640 3.01 3
49 SVCP 643 3.36 3
50 SVCP 644 6.82 4.25")
我想将格式更改为如下所示。其中第一列是网的网眼尺寸,后续列是特定长度 bin 中的观察数(例如 101-105mm、106-110mm、111-115 mm...等)。我将使用 10 毫米长的垃圾箱。
52.5 52 11 1 1 0 0 0 0
54.5 102 91 16 4 4 2 0 3
56.5 295 232 131 61 17 13 3 1
58.5 309 318 362 243 95 26 4 3
60.5 118 173 326 342 199 100 10 11
62.5 79 87 191 239 202 201 39 15
64.5 27 48 111 143 133 185 72 25
66.5 14 17 44 51 52 122 74 41
68.5 8 6 14 23 25 59 65 76
70.5 7 3 8 14 15 16 34 33
72.5 0 3 1 2 5 4 6 15
这是一种使用 tidyverse
元包中的 dplyr
和 tidyr
的方法。首先我创建一个新变量Length_bin
来分配bin,然后统计每个bin中每个网格边有多少,然后从长格式传播到宽格式。
library(tidyverse)
fish_data %>%
mutate(Length_bin = (floor(Length / 5) * 5)) %>%
count(mesh, Length_bin) %>%
spread(Length_bin, n, fill = 0)
# A tibble: 4 x 15
# mesh `450` `580` `585` `590` `595` `600` `605` `610` `615` `620` `625` `630` `635` `640`
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 3 0 1 1 3 3 4 2 1 1 3 6 2 2 2
#2 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0
#3 4.25 0 0 0 0 0 0 0 0 0 0 0 0 0 1
#4 5 0 0 0 0 0 0 1 0 0 0 0 0 0 0