Назначить уровень фактора на основе двух одновременных условий (порог и количество) - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужно назначить уровень фактора (в новом столбце), основанный на том, сколько раз встречается определенный порог для определенного наблюдения в наборе атрибутов.

Вот пример базы данных видов (n = 26) и нескольких атрибутов (n = 6). Я хочу добавить новый столбец / переменную в зависимости от того, сколько раз встречается определенный порог для определенного наблюдения в наборе атрибутов. Было бы здорово, если бы существовало решение, основанное на тидиверсной логике

База данных по 26 видам и 6 атрибутам

at1 <- rnorm(26,2,1)
at2 <- rnorm(26,1.6,1.2)
at3 <- rnorm(26,2,1)
at4 <- rnorm(26,1.6,1.2)
at5 <- rnorm(26,2,1)
at6 <- rnorm(26,1.6,1.2)
sp <-paste("sp_", letters, sep="")
data<-data.frame(sp,at1,at2,at3,at4,at5,at6)

условие 1: назначить «высокий» уровень, если хотя бы три атрибута превышают порог 3

условие 2: назначить «умеренный» уровень, если хотя бы три атрибута превышают пороговое значение 2,5

присваивать "низкий", если не выполняется ни одно из вышеуказанных условий

1 Ответ

0 голосов
/ 06 ноября 2018

Функция dplyr case_when подходит для случаев, когда значение столбца зависит от нескольких условий.

# set.seed(4)

> data %>% 
    gather(key, value, -sp) %>%
    group_by(sp) %>%
    mutate(threshold = case_when(
        sum(value > 3.0) > 2 ~ 'high', 
        sum(value > 2.5) > 2 ~ 'moderate',
        TRUE                 ~ 'low')
    ) %>%
    spread(key, value)

# A tibble: 26 x 8
# Groups:   sp [26]
   sp    threshold   at1    at2   at3     at4   at5    at6
   <fct> <chr>     <dbl>  <dbl> <dbl>   <dbl> <dbl>  <dbl>
 1 sp_a  low       2.22   3.11  1.92   0.644  2.04   2.89 
 2 sp_b  low       1.46   2.69  2.44   1.54   0.274  2.40 
 3 sp_c  high      2.89   0.486 3.97   3.14   3.56   0.442
 4 sp_d  moderate  2.60   3.09  1.40   1.34   2.78  -0.770
 5 sp_e  low       3.64   1.78  1.45   0.910  0.901  0.898
 6 sp_f  moderate  2.69   2.86  2.70  -0.165  0.272  2.76 
 7 sp_g  low       0.719  0.695 1.84   0.361  2.43   2.26 
 8 sp_h  low       1.79  -0.179 3.35   0.0322 2.74   1.50 
 9 sp_i  moderate  3.90   2.63  0.931  0.594  2.87  -0.412
10 sp_j  high      3.78   1.11  3.06   0.243  2.31   3.06 
# ... with 16 more rows
...