Поиск диапазона на основе минимальных значений, который увеличивает - PullRequest
0 голосов
/ 17 июня 2020

У меня есть набор данных с несколькими станциями, глубинами и концентрациями. Я пытаюсь найти разницу в глубине (или толщине) на основе того, где минимальная концентрация увеличивается на 0,1

Например: на станции 1 максимальная глубина составляет 14 метров. Кон c равен 0,1 на 4 м и увеличивается до 0,2 на 6 м. Но затем он снова снижается до 0,1 на 10 м и остается таким до 12 м, а затем увеличивается. Он увеличивается всего на 0,05 на 13м. На 14 м концентрация увеличивается на 0,1. Таким образом, 14 м - это самая глубокая (или максимальная глубина), где находится наименьшее значение con c. Мне нужно найти способ исправить мой код, чтобы найти это 14 ... (т.е. где концентрация увеличивается на 0,1). Я могу найти максимальную глубину для данной станции и минимальную концентрацию.

Этот код дает мне столбец с максимальной глубиной для каждой станции (max_depth) и еще один столбец о минимальной концентрации для каждой станции (min_con c).

Как мне узнать, на какой глубине самая низкая концентрация увеличивается на 0,1?

Я пытаюсь использовать 'which' max и min, но я не могу понять код .. Как использовать Dplyr Summarize и which () для поиска минимальных / максимальных значений

station <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4)
depth <- c(1, 2, 3, 6, 8, 9, 10, 11, 12, 13, 14, 1, 3, 4, 6, 8, 10, 11, 14, 1, 2, 4, 6, 8, 9, 10, 15, 18, 20, 1, 2, 4, 6, 8, 10, 11)
conc <- c(0.4, 0.4, 0.3, 0.1, 0.2, NA, 0.2, 0.1, 0.1, 0.1, 0.15, 0.2, 0.5, 0.4, 0.3, 0.6, 0.4, 0.2, 0.1, 0.2, 0.3, 0.2, 0.5, 0.5, 0.3, 0.2, 0.1, 0.2, 0.2, 0.2, 0.8, 0.6, 0.4, 0.3, 0.2, 0.3, 0.3)

df <- cbind(station, depth, conc)
(df <- as.data.frame(df))          

(depth <- df %>% 
 group_by(station) %>%
 summarize(
Max_depth=miss(max(depth)),
min_conc=miss(min(conc, na.rm=TRUE)),
press_depth = depth[tail(which(conc == min(conc, na.rm = TRUE)), 1)]))

вместо этого:

 press_depth = depth[tail(which(conc == min(conc > 0.1, na.rm = TRUE)), 1)])

Я получаю сообщение об ошибке: столбец press_depth должен иметь длину 1 (итоговое значение), а не 0

1 Ответ

0 голосов
/ 17 июня 2020

Я не уверен, что полностью понял, о чем вы спрашиваете, но, надеюсь, это поможет вам начать. Если это отличается от того, что вы имели в виду, дайте мне знать:

library(dplyr)

df <- data_frame(
  station = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4),
  depth = c(1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 1, 3, 4, 6, 8, 10, 11, 14, 1, 2, 4, 6, 8, 9, 10, 15, 18, 20, 1, 2, 4, 6, 8, 10, 11),
  conc = c(0.4, 0.6, 0.3, 0.2, 0.2, NA, 0.2, 0.2, 0.2, 0.1, 0.2, 0.5, 0.4, 0.3, 0.6, 0.4, 0.2, 0.1, 0.2, 0.3, 0.2, 0.5, 0.5, 0.3, 0.2, 0.1, 0.2, 0.2, 0.2, 0.8, 0.6, 0.4, 0.3, 0.2, 0.3, 0.3)
  )

df %>% 
  group_by(station) %>% 
  mutate(conc_diff = lead(conc) - conc,
         dept_diff = lead(depth) - depth) %>% 
  filter(conc_diff == .1, conc == min(conc, na.rm = TRUE)) %>% 
  filter(depth == max(depth))
#> # A tibble: 3 x 5
#> # Groups:   station [3]
#>   station depth  conc conc_diff dept_diff
#>     <dbl> <dbl> <dbl>     <dbl>     <dbl>
#> 1       1    13   0.1       0.1         1
#> 2       2    11   0.1       0.1         3
#> 3       3    10   0.1       0.1         5

Создано 17.06.2020 с помощью пакета реплекс (v0.3.0)

...