Добавить новый столбец, содержащий разницу с фиксированным эталонным значением в R - PullRequest
4 голосов
/ 20 апреля 2020

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

data= data.frame(Site_ID=c(1, 1, 1, 2, 2, 2, 3, 3, 3), Year=c(2000, 2001, 2002, 2001, 2002, 2003, 2002, 2003, 2004), AnnualMean=c(1.1, 1.2, 1.1, 2.1, 2.6, 3.1, 2.7, 2.6, 1.9))

Я хотел бы добавить новый столбец к этому фрейму данных, который содержит разница между среднегодовым значением данного года и определенного базового года для каждого участка мониторинга. Каждый сайт мониторинга имеет один и тот же базовый год (здесь 2002). Получившаяся таблица будет выглядеть так:

data= data.frame(Site_ID=c(1, 1, 1, 2, 2, 2, 3, 3, 3), Year=c(2000, 2001, 2002, 2001, 2002, 2003, 2002, 2003, 2004), AnnualMean=c(1.1, 1.2, 1.1, 2.1, 2.6, 3.1, 2.7, 2.6, 1.9), Diff_ref=c(0.0, 0.1, NA, -0.5, NA, 0.5, NA, -0.1, -0.8)

Спасибо большое!

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Одно dplyr решение может быть:

data %>%
 group_by(Site_ID) %>%
 mutate(Diff_ref = ifelse(Year == 2002, NA, AnnualMean - AnnualMean[Year == 2002]))

  Site_ID  Year AnnualMean Diff_ref
    <dbl> <dbl>      <dbl>    <dbl>
1       1  2000        1.1   0     
2       1  2001        1.2   0.1000
3       1  2002        1.1  NA     
4       2  2001        2.1  -0.5   
5       2  2002        2.6  NA     
6       2  2003        3.1   0.5   
7       3  2002        2.7  NA     
8       3  2003        2.6  -0.1   
9       3  2004        1.9  -0.8 
0 голосов
/ 20 апреля 2020

Использование data.table

library(data.table)
setDT(data)[, Diff_ref := fifelse(Year == 2002, NA_real_,
                 AnnualMean - AnnualMean[Year == 2002]), Site_ID]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...