Data tally procedures and forms are presented in this document: PROTOCOLLO DI RILIEVO CANALI ESCA_V2.pdf

library(tidyverse)
library(googlesheets)
suppressMessages(library(dplyr))

# URL del tabellone https://docs.google.com/spreadsheets/d/1Wh0gII8TdrOAcPP4iOK3idmK_BEcZF_35xsoaQobTuU/edit#gid=607028096
input.gs <- 
  "FormsInserimentoDati_Arzana2018_2"  %T>%
  gs_ls %>%
  gs_title
Sheet successfully identified: "FormsInserimentoDati_Arzana2018_2"
input.gs %>%
  gs_ws_ls
[1] "ISSUES"       "Intestazione" "Scheda_1"     "Scheda_2"    
[5] "Rotelle"     
ISSUES

Intestazione

Scheda_1

Scheda_2

Rotelle
for(s in c("Intestazione", "Scheda_1", "Scheda_2", "Rotelle"  )) {
  assign(s ,   gs_read(input.gs, ws = s))
}
Accessing worksheet titled 'Intestazione'.
Parsed with column specification:
cols(
  complesso = col_character(),
  data = col_character(),
  rilevatori = col_character(),
  id_gradone = col_character(),
  progr_gradone = col_character(),
  id_fusto_campione = col_integer(),
  specie = col_character(),
  d_130 = col_integer(),
  h_ipso = col_number(),
  lung_atterrato = col_number(),
  peso_ramaglia = col_integer(),
  fascine = col_character()
)
Accessing worksheet titled 'Scheda_1'.
Parsed with column specification:
cols(
  id_fusto_campione = col_integer(),
  progressivo_foglio = col_integer(),
  distanza_suolo = col_character(),
  diam_sezione = col_integer(),
  id_asta_secondaria = col_character(),
  stato_palco = col_character(),
  numero_rami = col_character(),
  diam_ramo_grosso = col_integer()
)
Accessing worksheet titled 'Scheda_2'.
Warning: Missing column names filled in: 'X6' [6]
Parsed with column specification:
cols(
  id_fusto_campione = col_integer(),
  progressivo_foglio = col_integer(),
  id_asta_secondaria = col_character(),
  dist_da_biforcazione = col_character(),
  diam_sezione = col_character(),
  X6 = col_integer()
)
Accessing worksheet titled 'Rotelle'.
Parsed with column specification:
cols(
  id_fusto_campione = col_integer(),
  peso_rotelle = col_number(),
  dist_rot_id0 = col_character(),
  dist_rot_id1 = col_character(),
  dist_rot_id2 = col_number(),
  dist_rot_id3 = col_number(),
  dist_rot_id4 = col_number(),
  dist_rot_id5 = col_number(),
  dist_rot_id6 = col_number()
)
Intestazione <- Intestazione %>% 
  fill(complesso)
Scheda_1 <- Scheda_1 %>% 
  fill(id_fusto_campione, progressivo_foglio) %>%
  mutate(distanza_suolo = 
           parse_double(distanza_suolo,
                        locale = locale(decimal_mark = ",")))
Warning: 1 parsing failure.
row # A tibble: 1 x 4 col     row   col expected               actual expected   <int> <int> <chr>                  <chr>  actual 1  6244    NA no trailing characters ,75   
Scheda_2 <- Scheda_2 %>% 
  fill(id_fusto_campione, progressivo_foglio, id_asta_secondaria)

Basic statistics

library(magrittr)
numbers_only <- function(x) !grepl("\\D", x)

cat("Foglio: 'Intestazione'\n")
Foglio: 'Intestazione'
Intestazione %T>%
  {print(paste("N. di fusti campione - Totale (acquisito):", length(unique(Intestazione$id_fusto_campione))))} %>%
  group_by(id_gradone, specie) %>% 
  summarise( n_FC = n()) %>% 
  spread(specie, n_FC) %>% 
  arrange(ifelse(numbers_only(.$id_gradone), str_sub(paste0("000", .$id_gradone), -3), .$id_gradone)) %>% hux(add_colnames = T) %>%
  set_align( every(), 1:3, 'center')  %>%
  set_caption('Stats by gradonre or lotto') %>%
  theme_plain()
[1] "N. di fusti campione - Totale (acquisito): 92"

Stats by gradonre or lotto
id_gradone M R
1 1
3 1
4 1
5 1
6 1
8 1
9 1
10 1
14 3
15 3
16 2
17 1
19 1
20 1
21 2
22 2
23 1
24 2
25 1
26 1
27 1
29 1
32 2
35 2
36 1
38 2
40 1
42 1
43 1
45 2
49 2
51 1
53 1
55 1
56 1
61 3
63 1
64 1
65 2
72 1
73 1
79 3
84 1
86 2
89 1
91 1
95 1
96 1
112 2
A 3
B 5
C 3
D 3
E 2
F 3 4

Intestazione %>%
  group_by(specie) %>%
  summarise(n_FC = n(), min_dbh = min(.$d_130), max_dbh = max(.$d_130)) %>%
  hux(add_colnames = T) %>%
  set_align( every(), 1:3, 'center')  %>%
  set_caption('Stats by species') %>%
  theme_plain()
Stats by species
specie n_FC min_dbh max_dbh
M 42 11 54
R 50 11 54

Distances from ground should be stricly increasing

library(huxtable)

Scheda_1 %>%
  rowid_to_column %>%
  group_by(id_fusto_campione) %>%
  mutate(dist_succ = lead(distanza_suolo, 1), tree_row = row_number()) %>%
  select(1:3, distanza_suolo, tree_row, dist_succ) %>%
  filter(tree_row >3 & distanza_suolo >= dist_succ) %>%
  hux(add_colnames = TRUE) %>%
  set_align( every(), 1:3, 'center')  %>%
  set_caption('Rows after wich distance decreases') %>%
  theme_plain()

Rows after wich distance decreases
rowid id_fusto_campione progressivo_foglio distanza_suolo tree_row dist_succ
6229 78 2 23.4  73 13.6 
6478 81 1 15.2  37 14.4 
6556 82 1 9.6  20 9.4 
6558 82 1 9.75 22 9.35
7043 86 1 23.9  81 23.4 
7053 86 1 24.6  91 14.7 
7234 88 2 19.7  57 18.8 
7323 89 2 29.1  79 20.3 
7425 90 2 22.8  68 3.2 
7451 90 2 26.4  94 16.4 
7613 93 2 15.2  64 14.4 
7634 93 2 18.8  85 10.8 

cat(paste("Analysis completed at:", Sys.time()))
Analysis completed at: 2018-09-08 21:34:56
LS0tDQp0aXRsZTogIlN0ZW0gYW5hbHlzaXMgLSBwcmVwcm9jZXNzaW5nIg0Kc3VidGl0bGU6ICJKdXN0IGZpcnN0IGNoZWNrcyINCmF1dGhvcjoNCi0gbmFtZTogUm9iZXJ0byBTY290dGkNCiAgYWZmaWxpYXRpb246IE51b3JvRm9yZXN0cnlTY2hvb2wNCmFic3RyYWN0OiB8DQogIFByZXByb2Nlc3NpbmcgaW5jbHVkZXMgYWxsIHN0ZXBzIGZyb20gYWNjZXNzaW5nIHJhdyBpbnB1dCBvbiBHb29nbGVTaGVldHMgdG8gdGhlIHByb2R1Y3Rpb24gb2YgYSB2YWxpZGF0ZWQgU1FMaXRlIERCLiAgDQogIFRoaXMgdmVyc2lvbiBzdG9wcyBwcm9jZXNzaW5nIGFmdGVyIGEgZmlyc3QgY2hlY2sgb24gaW5wdXQgZGF0YS4gIA0KICBSZXBvOiBodHRwczovL2dpdGxhYi5jb20vTnVvcm9Gb3Jlc3RyeVNjaG9vbC9BcnphbmFfUGluZXNVdGlsaXphdGlvbl9NYXJvbmdpdTIwMTcNCmtleXdvcmRzOiAiZGF0YSB3cmFuZ2xpbmciDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiDQoNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KIyBZQU1MIGZyb20gaHR0cDovL3N2bWlsbGVyLmNvbS9ibG9nLzIwMTYvMDIvc3ZtLXItbWFya2Rvd24tbWFudXNjcmlwdC8NCi0tLQ0KDQpEYXRhIHRhbGx5IHByb2NlZHVyZXMgYW5kIGZvcm1zIGFyZSBwcmVzZW50ZWQgaW4gdGhpcyBkb2N1bWVudDoNCltQUk9UT0NPTExPIERJIFJJTElFVk8gQ0FOQUxJIEVTQ0FfVjIucGRmXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvZm9sZGVycy8wQnc0My1rZURmSmZGV2xWRVREbERXbXRWZUVrKQ0KDQpgYGB7ciBBY2Nlc3NHU30NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnb29nbGVzaGVldHMpDQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZHBseXIpKQ0KDQojIFVSTCBkZWwgdGFiZWxsb25lIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFXaDBnSUk4VGRyT0FjUFA0aU9LM2lkbUtfQkVjWkZfMzV4c29hUW9iVHVVL2VkaXQjZ2lkPTYwNzAyODA5Ng0KaW5wdXQuZ3MgPC0gDQogICJGb3Jtc0luc2VyaW1lbnRvRGF0aV9BcnphbmEyMDE4XzIiICAlVD4lDQogIGdzX2xzICU+JQ0KICBnc190aXRsZQ0KDQppbnB1dC5ncyAlPiUNCiAgZ3Nfd3NfbHMNCg0KZm9yKHMgaW4gYygiSW50ZXN0YXppb25lIiwgIlNjaGVkYV8xIiwgIlNjaGVkYV8yIiwgIlJvdGVsbGUiICApKSB7DQogIGFzc2lnbihzICwgICBnc19yZWFkKGlucHV0LmdzLCB3cyA9IHMpKQ0KfQ0KDQpJbnRlc3RhemlvbmUgPC0gSW50ZXN0YXppb25lICU+JSANCiAgZmlsbChjb21wbGVzc28pDQpTY2hlZGFfMSA8LSBTY2hlZGFfMSAlPiUgDQogIGZpbGwoaWRfZnVzdG9fY2FtcGlvbmUsIHByb2dyZXNzaXZvX2ZvZ2xpbykgJT4lDQogIG11dGF0ZShkaXN0YW56YV9zdW9sbyA9IA0KICAgICAgICAgICBwYXJzZV9kb3VibGUoZGlzdGFuemFfc3VvbG8sDQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2NhbGUoZGVjaW1hbF9tYXJrID0gIiwiKSkpDQpTY2hlZGFfMiA8LSBTY2hlZGFfMiAlPiUgDQogIGZpbGwoaWRfZnVzdG9fY2FtcGlvbmUsIHByb2dyZXNzaXZvX2ZvZ2xpbywgaWRfYXN0YV9zZWNvbmRhcmlhKQ0KDQpgYGANCg0KIyBCYXNpYyBzdGF0aXN0aWNzDQoNCmBgYHtyfQ0KbGlicmFyeShtYWdyaXR0cikNCm51bWJlcnNfb25seSA8LSBmdW5jdGlvbih4KSAhZ3JlcGwoIlxcRCIsIHgpDQoNCmNhdCgiRm9nbGlvOiAnSW50ZXN0YXppb25lJ1xuIikNCkludGVzdGF6aW9uZSAlVD4lDQogIHtwcmludChwYXN0ZSgiTi4gZGkgZnVzdGkgY2FtcGlvbmUgLSBUb3RhbGUgKGFjcXVpc2l0byk6IiwgbGVuZ3RoKHVuaXF1ZShJbnRlc3RhemlvbmUkaWRfZnVzdG9fY2FtcGlvbmUpKSkpfSAlPiUNCiAgZ3JvdXBfYnkoaWRfZ3JhZG9uZSwgc3BlY2llKSAlPiUgDQogIHN1bW1hcmlzZSggbl9GQyA9IG4oKSkgJT4lIA0KICBzcHJlYWQoc3BlY2llLCBuX0ZDKSAlPiUgDQogIGFycmFuZ2UoaWZlbHNlKG51bWJlcnNfb25seSguJGlkX2dyYWRvbmUpLCBzdHJfc3ViKHBhc3RlMCgiMDAwIiwgLiRpZF9ncmFkb25lKSwgLTMpLCAuJGlkX2dyYWRvbmUpKSAlPiUgaHV4KGFkZF9jb2xuYW1lcyA9IFQpICU+JQ0KICBzZXRfYWxpZ24oIGV2ZXJ5KCksIDE6MywgJ2NlbnRlcicpICAlPiUNCiAgc2V0X2NhcHRpb24oJ1N0YXRzIGJ5IGdyYWRvbnJlIG9yIGxvdHRvJykgJT4lDQogIHRoZW1lX3BsYWluKCkNCg0KSW50ZXN0YXppb25lICU+JQ0KICBncm91cF9ieShzcGVjaWUpICU+JQ0KICBzdW1tYXJpc2Uobl9GQyA9IG4oKSwgbWluX2RiaCA9IG1pbiguJGRfMTMwKSwgbWF4X2RiaCA9IG1heCguJGRfMTMwKSkgJT4lDQogIGh1eChhZGRfY29sbmFtZXMgPSBUKSAlPiUNCiAgc2V0X2FsaWduKCBldmVyeSgpLCAxOjMsICdjZW50ZXInKSAgJT4lDQogIHNldF9jYXB0aW9uKCdTdGF0cyBieSBzcGVjaWVzJykgJT4lDQogIHRoZW1lX3BsYWluKCkNCg0KDQpgYGANCg0KDQoNCiMgRGlzdGFuY2VzIGZyb20gZ3JvdW5kIHNob3VsZCBiZSBzdHJpY2x5IGluY3JlYXNpbmcNCg0KYGBge3IgY2hlY2sxfQ0KbGlicmFyeShodXh0YWJsZSkNCg0KU2NoZWRhXzEgJT4lDQogIHJvd2lkX3RvX2NvbHVtbiAlPiUNCiAgZ3JvdXBfYnkoaWRfZnVzdG9fY2FtcGlvbmUpICU+JQ0KICBtdXRhdGUoZGlzdF9zdWNjID0gbGVhZChkaXN0YW56YV9zdW9sbywgMSksIHRyZWVfcm93ID0gcm93X251bWJlcigpKSAlPiUNCiAgc2VsZWN0KDE6MywgZGlzdGFuemFfc3VvbG8sIHRyZWVfcm93LCBkaXN0X3N1Y2MpICU+JQ0KICBmaWx0ZXIodHJlZV9yb3cgPjMgJiBkaXN0YW56YV9zdW9sbyA+PSBkaXN0X3N1Y2MpICU+JQ0KICBodXgoYWRkX2NvbG5hbWVzID0gVFJVRSkgJT4lDQogIHNldF9hbGlnbiggZXZlcnkoKSwgMTozLCAnY2VudGVyJykgICU+JQ0KICBzZXRfY2FwdGlvbignUm93cyBhZnRlciB3aWNoIGRpc3RhbmNlIGRlY3JlYXNlcycpICU+JQ0KICB0aGVtZV9wbGFpbigpDQoNCmNhdChwYXN0ZSgiQW5hbHlzaXMgY29tcGxldGVkIGF0OiIsIFN5cy50aW1lKCkpKQ0KDQpgYGANCg0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KIyBybWFya2Rvd246OnJlbmRlcigiU3RlbUFuYWx5c2lzLVByZVByb2Nlc3NpbmcyLlJtZCIpDQojIG1hcmtkb3duOjpycHVic1VwbG9hZCgiU3RlbSBhbmFseXNpcyAtIGRhdGEgd3JhbmdsaW5nIiwgIlN0ZW1BbmFseXNpcy1QcmVQcm9jZXNzaW5nLm5iLmh0bWwiKQ0KYGBgDQoNCg==