R скрипт - Рассчитать общую стоимость для разных групп на основе критериев стоимости другого столбца? - PullRequest
0 голосов
/ 28 сентября 2019

Я не могу понять, как рассчитать стоимость каждой диеты (D1-D4) на основе веса, где стоимость каждой диеты:

D1: 2,2 * 10 ^ -5 доллар / вес

D2: 2,8 * 10 ^ -5 доллар / вес

D3: 3 * 10 ^ -5 доллар / вес

D4: 3,2 * 10 ^ -5 доллар / вес

Нужно ли создавать новые столбцы для затрат или их можно сразу применить в какой-то формуле?Или что-то вроде when_case?Я новичок в R, поэтому все еще изучаю синтаксис

rawSourceData
Weight  Days Chicken  Diet Group NewDiet
42       0       1     1    G1     D1
51       2       1     1    G1     D1  
59       4       1     1    G1     D1     
64       6       1     1    G1     D1     
76       8       1     1    G1     D1     
93      10       1     1    G1     D1     
106     12       1     1    G1     D1     
125     14       1     1    G1     D1     
149     16       1     1    G1     D1     
171     18       1     1    G1     D1     
# ... with 568 more rows

Я хотел бы составить график, как я делал это при подсчете веса цыплят в день 21 при каждой диете, как показано ниже.

rawSourceData %>% group_by(Chicken) %>% filter(max(Days) >= 21) %>% ggplot( aes(x=Days, y=Weight, color=NewDiet, group=Chicken)) + geom_point() + geom_line() + facet_grid(.~NewDiet)

1 Ответ

0 голосов
/ 28 сентября 2019

Да, есть формула из пакета dplyr с именем case_when:

Я только что создал таблицу на основе вашего примера:

library(dplyr)
library(readr)

A <- read_table("Weight  Days Chicken  Diet Group NewDiet
    42       0       1     1    G1     D1
    51       2       1     1    G1     D1  
    59       4       1     1    G1     D4     
    64       6       1     1    G1     D1     
    76       8       1     1    G1     D3     
    93      10       1     1    G1     D1     
    106     12       1     1    G1     D1     
    125     14       1     1    G1     D1     
    149     16       1     1    G1     D1     
    171     18       1     1    G1     D2 ")

Если вы хотите создатьновый столбец в A:

A$Cost_Diet <-   case_when(A$NewDiet == "D1" ~ 2.2 * 10^(-5)/A$Weight,
                           A$NewDiet == "D2" ~ 2.8 * 10^(-5)/A$Weight,
                           A$NewDiet == "D3" ~ 3 * 10^(-5)/A$Weight,
                           A$NewDiet == "D4" ~ 3.2 * 10^(-5)/A$Weight)

Вывод:

> A
# A tibble: 10 x 7
   Weight  Days Chicken  Diet Group NewDiet   Cost_Diet
    <dbl> <dbl>   <dbl> <dbl> <chr> <chr>         <dbl>
 1     42     0       1     1 G1    D1      0.000000524
 2     51     2       1     1 G1    D1      0.000000431
 3     59     4       1     1 G1    D4      0.000000542
 4     64     6       1     1 G1    D1      0.000000344
 5     76     8       1     1 G1    D3      0.000000395
 6     93    10       1     1 G1    D1      0.000000237
 7    106    12       1     1 G1    D1      0.000000208
 8    125    14       1     1 G1    D1      0.000000176
 9    149    16       1     1 G1    D1      0.000000148
10    171    18       1     1 G1    D2      0.000000164

Или в отдельном векторе:

Cost_Diet <-   case_when(A$NewDiet == "D1" ~ 2.2 * 10^(-5)/A$Weight,
                           A$NewDiet == "D2" ~ 2.8 * 10^(-5)/A$Weight,
                           A$NewDiet == "D3" ~ 3 * 10^(-5)/A$Weight,
                           A$NewDiet == "D4" ~ 3.2 * 10^(-5)/A$Weight)

Вывод:

> Cost_Diet
 [1] 5.238095e-07 4.313725e-07 5.423729e-07 3.437500e-07 3.947368e-07 2.365591e-07 2.075472e-07 1.760000e-07
 [9] 1.476510e-07 1.637427e-07
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...