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
Auto-refreshing stale OAuth token.
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'.
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()
)
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 = ",")))
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)
[1] "N. di fusti campione - Totale (acquisito): 73"

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 2
84 1
86 2
89 1
91 1
95 1
96 1
112 2
B 1
F 3 1

Intestazione %>%
  group_by(specie) %>%
  summarise(n_FC = n(), min_dbh = min(.$d_130), max_dbh = max(.$d_130)) %>%
  hux(add_colnames = T)
specie n_FC min_dbh max_dbh
M 42 11 51
R 31 11 51

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
3899 30 1 6.05 29 5.9 
3943 31 1 6.35 26 5.55
3973 31 2 12.8  56 11.9 
4042 32 1 10.8  53 10.8 
4276 41 2 12.8  52 12   
4295 43 1 9    8 3.4 
4541 45 2 22.8  65 22.3 
4555 45 2 26.7  79 16.8 
4619 46 1 15.6  42 12.8 
4680 46 2 28.4  103 18.4 
4723 48 1 14.3  41 4.55
4746 48 2 19.9  64 10   
4749 48 2 20.3  67 10.5 
4889 52 3 24.2  109 23.4 
4951 53 2 20.7  61 10.9 
5031 55 2 19.6  62 18.9 
5089 56 1 10.9  27 10.6 
5123 56 2 20.3  61 10.6 
5209 57 2 29.6  62 20.7 
5290 58 1 19.9  56 17.1 
5313 58 1 23.3  79 21.9 
5499 61 2 16.4  63 16.2 
5539 61 3 23.9  103 23.8 
5705 63 2 178    52 18.1 
5714 63 2 210    61 20.7 
5804 64 2 21.9  70 2.15

cat(paste("Analysis completed at:", Sys.time()))
Analysis completed at: 2018-09-08 00:57:20
LS0tDQp0aXRsZTogIlN0ZW0gYW5hbHlzaXMgLSBwcmVwcm9jZXNzaW5nIg0Kc3VidGl0bGU6ICJKdXN0IGZpcnN0IGNoZWNrcyINCmF1dGhvcjoNCi0gbmFtZTogUm9iZXJ0byBTY290dGkNCiAgYWZmaWxpYXRpb246IE51b3JvRm9yZXN0cnlTY2hvb2wNCmFic3RyYWN0OiB8DQogIFByZXByb2Nlc3NpbmcgaW5jbHVkZXMgYWxsIHN0ZXBzIGZyb20gYWNjZXNzaW5nIHJhdyBpbnB1dCBvbiBHb29nbGVTaGVldHMgdG8gdGhlIHByb2R1Y3Rpb24gb2YgYSB2YWxpZGF0ZWQgU1FMaXRlIERCLiAgDQogIFRoaXMgdmVyc2lvbiBzdG9wcyBwcm9jZXNzaW5nIGFmdGVyIGEgZmlyc3QgY2hlY2sgb24gaW5wdXQgZGF0YS4gIA0KICBSZXBvOiBodHRwczovL2dpdGxhYi5jb20vTnVvcm9Gb3Jlc3RyeVNjaG9vbC9BcnphbmFfUGluZXNVdGlsaXphdGlvbl9NYXJvbmdpdTIwMTcNCmtleXdvcmRzOiAiZGF0YSB3cmFuZ2xpbmciDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiDQoNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KIyBZQU1MIGZyb20gaHR0cDovL3N2bWlsbGVyLmNvbS9ibG9nLzIwMTYvMDIvc3ZtLXItbWFya2Rvd24tbWFudXNjcmlwdC8NCi0tLQ0KDQpEYXRhIHRhbGx5IHByb2NlZHVyZXMgYW5kIGZvcm1zIGFyZSBwcmVzZW50ZWQgaW4gdGhpcyBkb2N1bWVudDoNCltQUk9UT0NPTExPIERJIFJJTElFVk8gQ0FOQUxJIEVTQ0FfVjIucGRmXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvZm9sZGVycy8wQnc0My1rZURmSmZGV2xWRVREbERXbXRWZUVrKQ0KDQpgYGB7ciBBY2Nlc3NHU30NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnb29nbGVzaGVldHMpDQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZHBseXIpKQ0KDQojIFVSTCBkZWwgdGFiZWxsb25lIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFXaDBnSUk4VGRyT0FjUFA0aU9LM2lkbUtfQkVjWkZfMzV4c29hUW9iVHVVL2VkaXQjZ2lkPTYwNzAyODA5Ng0KaW5wdXQuZ3MgPC0gDQogICJGb3Jtc0luc2VyaW1lbnRvRGF0aV9BcnphbmEyMDE4XzIiICAlVD4lDQogIGdzX2xzICU+JQ0KICBnc190aXRsZQ0KDQppbnB1dC5ncyAlPiUNCiAgZ3Nfd3NfbHMNCg0KZm9yKHMgaW4gYygiSW50ZXN0YXppb25lIiwgIlNjaGVkYV8xIiwgIlNjaGVkYV8yIiwgIlJvdGVsbGUiICApKSB7DQogIGFzc2lnbihzICwgICBnc19yZWFkKGlucHV0LmdzLCB3cyA9IHMpKQ0KfQ0KDQpJbnRlc3RhemlvbmUgPC0gSW50ZXN0YXppb25lICU+JSANCiAgZmlsbChjb21wbGVzc28pDQpTY2hlZGFfMSA8LSBTY2hlZGFfMSAlPiUgDQogIGZpbGwoaWRfZnVzdG9fY2FtcGlvbmUsIHByb2dyZXNzaXZvX2ZvZ2xpbykgJT4lDQogIG11dGF0ZShkaXN0YW56YV9zdW9sbyA9IA0KICAgICAgICAgICBwYXJzZV9kb3VibGUoZGlzdGFuemFfc3VvbG8sDQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2NhbGUoZGVjaW1hbF9tYXJrID0gIiwiKSkpDQpTY2hlZGFfMiA8LSBTY2hlZGFfMiAlPiUgDQogIGZpbGwoaWRfZnVzdG9fY2FtcGlvbmUsIHByb2dyZXNzaXZvX2ZvZ2xpbywgaWRfYXN0YV9zZWNvbmRhcmlhKQ0KDQpgYGANCg0KIyBCYXNpYyBzdGF0aXN0aWNzDQoNCmBgYHtyfQ0KbGlicmFyeShtYWdyaXR0cikNCm51bWJlcnNfb25seSA8LSBmdW5jdGlvbih4KSAhZ3JlcGwoIlxcRCIsIHgpDQoNCmNhdCgiRm9nbGlvOiAnSW50ZXN0YXppb25lJ1xuIikNCkludGVzdGF6aW9uZSAlVD4lDQogIHtwcmludChwYXN0ZSgiTi4gZGkgZnVzdGkgY2FtcGlvbmUgLSBUb3RhbGUgKGFjcXVpc2l0byk6IiwgbGVuZ3RoKHVuaXF1ZShJbnRlc3RhemlvbmUkaWRfZnVzdG9fY2FtcGlvbmUpKSkpfSAlPiUNCiAgZ3JvdXBfYnkoaWRfZ3JhZG9uZSwgc3BlY2llKSAlPiUgDQogIHN1bW1hcmlzZSggbl9GQyA9IG4oKSkgJT4lIA0KICBzcHJlYWQoc3BlY2llLCBuX0ZDKSAlPiUgDQogIGFycmFuZ2UoaWZlbHNlKG51bWJlcnNfb25seSguJGlkX2dyYWRvbmUpLCBzdHJfc3ViKHBhc3RlMCgiMDAwIiwgLiRpZF9ncmFkb25lKSwgLTMpLCAuJGlkX2dyYWRvbmUpKSAlPiUgaHV4KGFkZF9jb2xuYW1lcyA9IFQpDQpJbnRlc3RhemlvbmUgJT4lDQogIGdyb3VwX2J5KHNwZWNpZSkgJT4lDQogIHN1bW1hcmlzZShuX0ZDID0gbigpLCBtaW5fZGJoID0gbWluKC4kZF8xMzApLCBtYXhfZGJoID0gbWF4KC4kZF8xMzApKSAlPiUNCiAgaHV4KGFkZF9jb2xuYW1lcyA9IFQpDQoNCmBgYA0KDQoNCg0KIyBEaXN0YW5jZXMgZnJvbSBncm91bmQgc2hvdWxkIGJlIHN0cmljbHkgaW5jcmVhc2luZw0KDQpgYGB7ciBjaGVjazF9DQpsaWJyYXJ5KGh1eHRhYmxlKQ0KDQpTY2hlZGFfMSAlPiUNCiAgcm93aWRfdG9fY29sdW1uICU+JQ0KICBncm91cF9ieShpZF9mdXN0b19jYW1waW9uZSkgJT4lDQogIG11dGF0ZShkaXN0X3N1Y2MgPSBsZWFkKGRpc3RhbnphX3N1b2xvLCAxKSwgdHJlZV9yb3cgPSByb3dfbnVtYmVyKCkpICU+JQ0KICBzZWxlY3QoMTozLCBkaXN0YW56YV9zdW9sbywgdHJlZV9yb3csIGRpc3Rfc3VjYykgJT4lDQogIGZpbHRlcih0cmVlX3JvdyA+MyAmIGRpc3RhbnphX3N1b2xvID49IGRpc3Rfc3VjYykgJT4lDQogIGh1eChhZGRfY29sbmFtZXMgPSBUUlVFKSAlPiUNCiAgc2V0X2FsaWduKCBldmVyeSgpLCAxOjMsICdjZW50ZXInKSAgJT4lDQogIHNldF9jYXB0aW9uKCdSb3dzIGFmdGVyIHdpY2ggZGlzdGFuY2UgZGVjcmVhc2VzJykgJT4lDQogIHRoZW1lX3BsYWluKCkNCg0KY2F0KHBhc3RlKCJBbmFseXNpcyBjb21wbGV0ZWQgYXQ6IiwgU3lzLnRpbWUoKSkpDQoNCmBgYA0KDQoNCmBgYHtyIGVjaG89RkFMU0V9DQojIHJtYXJrZG93bjo6cmVuZGVyKCJTdGVtQW5hbHlzaXMtUHJlUHJvY2Vzc2luZy5SbWQiKQ0KIyBtYXJrZG93bjo6cnB1YnNVcGxvYWQoIlN0ZW0gYW5hbHlzaXMgLSBkYXRhIHdyYW5nbGluZyIsICJTdGVtQW5hbHlzaXMtUHJlUHJvY2Vzc2luZy5uYi5odG1sIikNCmBgYA0KDQo=