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==