Функция с использованием условий - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать функцию, которая рассматривает определенное количество образцов (рек) для каждого с определенным количеством наблюдений.Учитывая 10 образцов каждая с 12 наблюдениями в логнормальном распределении со средним = 4 и SD = 1,4, я хотел бы получить количество раз, которое определенное число (6 - это относится к стандартному числу для измерения качества воды) подсчитывается.Ниже приведен код для одного эксперимента, который рассматривает «предел» в качестве максимального числа наблюдений, допустимых для пересечения 6.

set.seed(1001)
nobs<-12
limit<-round(0.10 * nobs, digits = 0) 
h2o <- as.data.frame(matrix(rnorm(10*12, mean = 4, sd = 1.4), ncol = 12))
paste(rep("Riv", nrow(h2o)), c(1:nrow(h2o)), sep = "")
rownames(h2o) <- paste(rep("Riv", nrow(h2o)), c(1:nrow(h2o)), sep = "")
colnames(h2o) <- paste(rep("Obs", ncol(h2o)), c(1:ncol(h2o)), sep = "")

# Количество объявленных рек, признанных нарушенными, исходя из предположения, что количество наблюдений на одну реку2 или более?

ifelse(h2o >=6,1,0)
h2o$Test<-rowSums(ifelse(h2o >=6,1,0))
length(h2o$Test[h2o$Test>1])

Функция должна возобновлять предыдущие данные и работать для разных наблюдений с разными выборками.

Спасибо

1 Ответ

0 голосов
/ 15 сентября 2018

Вот функция, использующая dplyr и tidyr из tidyverse.

library(tidyverse)

test_h2o <- function(data, threshold_quality = 6, limit = 1) {
  table <- data %>%
  rownames_to_column("river") %>%
  gather(observation, value, -river) %>%
    mutate(over_lim = value > threshold_quality)

  table_wide <- table %>%
    select(river, observation, over_lim) %>%
    mutate(over_lim = over_lim %>% as.integer()) %>%
    spread(observation, over_lim)

  summary <- table %>%
    group_by(river) %>%
    summarize(over_lim_count = sum(over_lim))

  result <- summary %>%
    summarize(num_impaired = sum(over_lim_count > limit))

  list(table_wide, summary, result)
}

Вот вывод, предназначенный для демонстрации шагов в вашем примере:

> test_h2o(h2o)
[[1]]
   river Obs1 Obs10 Obs11 Obs12 Obs2 Obs3 Obs4 Obs5 Obs6 Obs7 Obs8 Obs9
1   Riv1    0     0     0     0    0    0    0    0    0    0    0    0
2  Riv10    0     0     0     0    0    0    0    0    0    0    0    0
3   Riv2    0     0     1     0    0    0    0    0    0    0    0    0
4   Riv3    1     0     0     0    0    0    0    0    0    0    0    0
5   Riv4    0     0     0     0    0    0    0    0    0    0    0    1
6   Riv5    0     1     0     0    0    0    0    0    0    0    0    0
7   Riv6    0     1     1     0    0    1    0    0    0    0    0    0
8   Riv7    0     0     0     0    0    0    0    0    0    0    0    0
9   Riv8    0     0     0     0    0    0    0    1    0    1    0    0
10  Riv9    1     0     0     0    0    0    0    0    0    0    0    0

[[2]]
# A tibble: 10 x 2
   river over_lim_count
   <chr>          <int>
 1 Riv1               0
 2 Riv10              0
 3 Riv2               1
 4 Riv3               1
 5 Riv4               1
 6 Riv5               1
 7 Riv6               3
 8 Riv7               0
 9 Riv8               2
10 Riv9               1

[[3]]
# A tibble: 1 x 1
  num_impaired
         <int>
1            2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...