Я пытаюсь отфильтровать демографические данные по кораллам c во временном ряду. У меня есть набор кораллов, которые измеряются каждые 3 месяца. То, что я хочу сделать, - это.) Фильтр для всех кораллов, у которых в какой-то момент имел максимальный диаметр 9, 10 или 11 мм и б) удаляет кораллы, которые были ранее больше чем 9, 10 или 11 мм в предыдущей переписи кораллов. Важно отметить, что я хочу также фильтровать кораллы, которые находятся в пределах диапазона размеров и в следующем интервале времени, не покинули диапазон 9-11 мм, потому что это составляет 0 прироста, и я хочу включить эти кораллы тоже.
Я создал образец базы данных для работы. Колония # 1 является примером коралла, который вырос за пределы диапазона размеров (9-11 мм), а затем сократился до 9. Колония # 1 Я хочу полностью удалить из базы данных.
Колония № 2 начиналась за желаемого диапазона размеров (9-11 мм), а затем сжималась до этого диапазона. Я также хочу, чтобы этот коралл был удален, потому что я должен гарантировать, что кораллы, которые находятся в пределах диапазона размеров, не сжимались к нему, а росли к нему.
Колония # 3 является примером коралла, который вырос до диапазона размеров (9-11 мм) и выше без усадки, и это коралл, который я хочу сохранить, потому что он вырос до диапазона размеров.
Колония # 4 является примером коралла, который начинается выше диапазона размеров и поэтому должен быть удален.
Колония # 5 является примером коралла, который зародился ниже диапазона, вырос в него, а затем уменьшился в этом диапазоне. Для этого сценария я хочу включить только первый раз, когда диаметр попал в диапазон, а не второй. Это потому, что первый раз - это естественный рост, тогда как второй раз - это усадка и ее восстановление (которое я хочу исключить или отфильтровать).
Колония # 6 - пример коралла, который начался с размера Диапазон для TimeStep 1, а затем вырос из него в следующем TimeStep и продолжал расти после. Я хочу, чтобы в этом случае все измерения продолжались после первого шага TimeStep, чтобы я мог рассчитать рост между TimeStep 1 и 2.
Колония # 7 является примером коралла, который начался в диапазоне размеров в TimeStep 1 и затем остался в диапазоне для TimeStep 2. В этом случае (при условии, что коралл не сжимается до диапазона размеров позже), я хочу сохранить все измерения, продолжая TimeStep 1 и 2. Это случай, когда у коралла был 0 рост с того момента, когда он был первым в этом диапазоне, и я хочу включить эти кораллы в эту базу данных для анализа.
Колония # 8 является примером коралла, который вырос до диапазона размеров в TimeStep 3, оставаясь в диапазоне (10 => 9) в TimeStep 4, затем сократился ниже желаемого диапазона, затем для TimeStep 6 снова вырос до диапазона. Для этой колонии я хочу, чтобы TimeStep 4 был включен для этого коралла, потому что коралл считается одинаковым размером между TimeStep 3 и 4 (потому что размер все еще находится в диапазоне ошибки измерения).
Колония # 9 является примером коралла, который вырос до диапазона размеров в TimeStep 3, остался в нем в TimeStep 4 (10 => 9), а затем вырос выше диапазона в TimeStep 5 и для TimeStep 6. Как таковой, этот коралл должен иметь ВСЕ измерения (TimeStep 1-6), включенные в базу данных, потому что этот коралл никогда не сокращался.
Колония # 10 - пример коралла, который вырос до диапазона размеров, оставался в нем в TimeStep 4, затем сжался ниже диапазона в TimeStep 5, а затем вырос за его пределы в TimeStep 6. В этом случае я хочу включить TimeStep 5, потому что я хочу иметь меру сжатия от диапазона размеров. Таким образом, только TimeStep 6 должен быть отфильтрован, так как коралл сжался ниже диапазона размеров (9 - 11 мм).
В общем, я хочу код, который фильтрует эту базу данных так, что если коралл в какой-то момент имеет диаметром 9-11 мм, но ранее он был больше этого диапазона, никогда не достигал или не превышал диапазон, или начинался ниже диапазона и никогда не попадал в него, они полностью удаляются из базы данных. Кроме того, я хочу сохранить в базе данных любые кораллы, которые выросли до диапазона, а затем сократились до него, удаляя второй раз, когда он попадал в диапазон. Я ищу общую форму кода, чтобы можно было отфильтровать эти случаи так, чтобы все кораллы в базе данных начинали ниже 9-11 мм, а затем росли в этом диапазоне. Спасибо за ваше время!
База данных
Data <- structure(list(Site = c("WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI"
), `Module #` = c(116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116),
Side = c("N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N"), TimeStep = c(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5,
6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6,
1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1,
2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6), Settlement_Area = c(0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336), `Colony #` = c(1,
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4,
4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10,
10, 10, 10), Location = c("C1", "C1", "C1", "C1", "C1", "C1",
"B1", "B1", "B1", "B1", "B1", "B1", "A1", "A1", "A1", "A1",
"A1", "A1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1",
"D1", "D1", "D1", "D1", "A2", "A2", "A2", "A2", "A2", "A2",
"A4", "A4", "A4", "A4", "A4", "A4", "B3", "B3", "B3", "B3",
"B3", "B3", "C2", "C2", "C2", "C2", "C2", "C2", "B4", "B4",
"B4", "B4", "B4", "B4"), `Taxonomic Code` = c("PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC"), `Cover Code` = c(1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1), `Max Diameter (cm)` = c(5, 8, 12, 15, 9, 16, 15, 13,
11, 15, 17, 20, 3, 6, 9, 12, 15, 20, 13, 16, 24, 22, 28,
30, 6, 9, 14, 9, 15, 19, 11, 14, 17, 17, 21, 24, 9, 11, 14,
16, 20, 22, 3, 6, 10, 9, 7, 10, 5, 7, 10, 9, 13, 16, 5, 7,
9, 10, 8, 13)), class = c("spec_tbl_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -60L), spec = structure(list(
cols = list(Site = structure(list(), class = c("collector_character",
"collector")), `Module #` = structure(list(), class = c("collector_double",
"collector")), Side = structure(list(), class = c("collector_character",
"collector")), TimeStep = structure(list(), class = c("collector_double",
"collector")), Settlement_Area = structure(list(), class = c("collector_double",
"collector")), `Colony #` = structure(list(), class = c("collector_double",
"collector")), Location = structure(list(), class = c("collector_character",
"collector")), `Taxonomic Code` = structure(list(), class = c("collector_character",
"collector")), `Cover Code` = structure(list(), class = c("collector_double",
"collector")), `Max Diameter (cm)` = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
Желаемая база данных (отфильтрованная)
Data_2 <- structure(list(Site = c("WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI",
"WAI", "WAI", "WAI", "WAI", "WAI", "WAI", "WAI"), `Module #` = c(116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116
), Side = c("N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N",
"N", "N", "N", "N"), TimeStep = c(1, 2, 3, 4, 1, 2, 3, 4, 5,
6, 1, 2, 3, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 1,
2, 3, 4, 5, 6, 1, 2, 3, 4, 5), Settlement_Area = c(0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336, 0.75902336,
0.75902336, 0.75902336, 0.75902336), `Colony #` = c(1, 1, 1,
1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10), Location = c("C1",
"C1", "C1", "C1", "A1", "A1", "A1", "A1", "A1", "A1", "D1", "D1",
"D1", "A2", "A2", "A2", "A2", "A2", "A2", "A4", "A4", "A4", "A4",
"A4", "A4", "B3", "B3", "B3", "B3", "C2", "C2", "C2", "C2", "C2",
"C2", "B4", "B4", "B4", "B4", "B4"), `Taxonomic Code` = c("PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC", "PC",
"PC", "PC", "PC", "PC", "PC", "PC"), `Cover Code` = c(1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), `Max Diameter (cm)` = c(5,
8, 12, 15, 3, 6, 9, 12, 15, 20, 6, 9, 14, 11, 14, 17, 17, 21,
24, 9, 11, 14, 16, 20, 22, 3, 6, 10, 9, 5, 7, 10, 9, 13, 16,
5, 7, 9, 10, 8)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -40L), spec = structure(list(cols = list(
Site = structure(list(), class = c("collector_character",
"collector")), `Module #` = structure(list(), class = c("collector_double",
"collector")), Side = structure(list(), class = c("collector_character",
"collector")), TimeStep = structure(list(), class = c("collector_double",
"collector")), Settlement_Area = structure(list(), class = c("collector_double",
"collector")), `Colony #` = structure(list(), class = c("collector_double",
"collector")), Location = structure(list(), class = c("collector_character",
"collector")), `Taxonomic Code` = structure(list(), class = c("collector_character",
"collector")), `Cover Code` = structure(list(), class = c("collector_double",
"collector")), `Max Diameter (cm)` = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))