将数据处理成像 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 元包中的 dplyrtidyr 的方法。首先我创建一个新变量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